2

我需要處理App.xaml.cs文件的Application_UnhandledException事件中的異常。我使用e.ExceptionObject獲取Exception對象。現在,我需要在WebClient的幫助下使用WCF服務將異常詳細信息發送到我的服務器。Windows Phone 7 - 使用WebClient處理Application_UnhandledException中的錯誤

無論何時我使用WebClient向WCF服務發送請求,它都會發送請求,但會發送回叫事件,例如webClient_UploadStringCompleted永遠不會被執行。我讀的異常都在單獨的線程處理等

我已經嘗試過,但沒有成功:

  1. 的ThreadStart
  2. 螺紋
  3. App.Current.RootVisual.Dispatcher.BeginInvoke
  4. RootFrame.Dispatcher.BeginInvoke
  5. System.Windows.Deployment.Current.Dispatcher.BeginInvoke
  6. Deploymen t.Current.Dispatcher.BeginInvoke

任何人都可以告訴,如何將錯誤信息從Application_UnhandledException發送到WCF服務與WebClient?

代碼:

//代碼得到執行,對未處理的異常

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) 
{ 

e.Handled = true; 

// Option 1 
Thread thread = new Thread(() => MainPage.HandleException(e.ExceptionObject)); 
thread.Start(); 
ThreadStart start = new ThreadStart(NonUIWork); 

// Option 2 
Thread thread = new Thread(start); 
thread.Start(e.ExceptionObject); 

// Option 3 
Deployment.Current.Dispatcher.BeginInvoke(delegate { MainPage.HandleException(e.ExceptionObject); }); 

// Option 4 
App.Current.RootVisual.Dispatcher.BeginInvoke(MainPage.HandleException, e.ExceptionObject); 

// Option 5 
RootFrame.Dispatcher.BeginInvoke(() => { MainPage.HandleException(e.ExceptionObject); }); 

// Option 6 
MainPage.HandleException(e.ExceptionObject); 
} 

在MainPage.HandleException方法,我送例外細節WCF服務,WebClient的對象。但是,WebClient(webClient_UploadStringCompleted)的回調函數從未得到執行。看起來執行Application_UnhandledException事件的線程正在被立即掛起。

+0

你能只是張貼一些代碼,以顯示您在異常處理程序在做什麼,發送錯誤描述。 – 2011-06-02 07:09:39

+0

@Amresh Kumar添加了代碼片段。 – 2011-06-02 08:39:14

回答

1

是的,這不能通過設計工作。 CLR在AppDomain被卸載之前關閉AppDomain時引發該事件。您不能指望任何線程或異步操作運行完成。您的代碼必須在您的事件處理程序退出時完成。一定要使用同步方法並避免一起使用線程。通常不會阻止用戶界面代碼,在事件發生時再沒有用戶界面。

這確實是Windows Phone上的一個問題,它沒有WebClient的同步方法,就像WebClient.UploadString()一樣。您必須使用AutoResetEvent自行同步UploadStringAsync()。上傳調用後調用其WaitOne()方法,在回調中調用其Set()方法。

+0

謝謝。我會盡力讓你知道結果。 – 2011-06-02 12:57:06

2

你可以存儲在Windows手機,並在使用IsolatedStorage異常應用程序重新啓動,你可以使用asyncronous通話

+0

我結束了使用這個..在異常做一個同步WCF調用不起作用,並可能會給用戶一個漫長的等待崩潰的應用程序.. – Gluip 2014-09-28 12:14:24

相關問題