2010-12-06 217 views
6

您是否有一個想法:如何在應用程序的主線程中捕獲在特定線程中拋出的異常?捕獲未處理的線程異常

例如,我有一個非常簡單的線程做一些基本的東西:

try 
     { 
      Thread t = new Thread(new ThreadStart(Cache.initialize)); 
      t.Start(); 
      t.Name = "loading"; 
      while (t.IsAlive) 
      { 
       progressBar1.PerformStep(); 
      } 
     } 

     catch (PropertyOrFieldNotInitializedException ex) 
     { 
      Console.WriteLine(ex.StackTrace); 
      MessageBox.Show("L'application ne peut se connecter au serveur, vérifiez votre connexion"); 
     } 

的問題是,這個前提條件是沒用的,因爲異常不會在主堆棧中檢索..

public static void initialize() 
     { 
      try 
      { 
       ctxMdv = new ClientContext(Configuration.getInstance().UrlMdv); 
       ...     
      } 

      catch (PropertyOrFieldNotInitializedException e) //si le serveur n'est pas démarré 
{ 
       throw ; 
      } 

這裏的一切都停在「扔」,沒有任何處理,即使在主堆棧中,我試圖捕獲它顯示一個消息框。 那麼我怎麼能捕捉到我的線程中引發的這個PropertyOrFieldNotInitializedException? 你會有一些最佳做法,以捕捉c#中的線程異常?

非常感謝!

PS:好吧這要歸功於以下托爾斯滕·迪特馬給出了答案,我可以把它這樣工作: 這裏是主線程

BackgroundWorker bw = new BackgroundWorker(); 
     bw.WorkerReportsProgress = true; 
     bw.DoWork += new DoWorkEventHandler(bw_DoWork); 
     bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); 
     bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
     bw.RunWorkerAsync(); 

這裏是我的DoWork:

private void bw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     Cache.initialize(); // the thread job 
    } 

即使發生異常,也會發生這種情況:

private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     if (!(e.Error == null)) 

      if (e.Error is WebException) 
       Console.WriteLine(e.Error.StackTrace); 
      MessageBox.Show("L'application ne peut se connecter au serveur, vérifiez votre connexion"); 

     this.Dispose(); 
     Application.Exit(); 
    } 

我打算處理ProgressChanged委託來糾正進度條...;) 謝謝!

回答

4

那麼,一個辦法是在你的情況下使用,而不是BackgroundWorker線程。在那裏你不需要try塊,因爲錯誤將被自動捕獲並傳遞給工人結束時分配的處理程序。

編輯:
您還可以使用事件的BackgroundWorker報告進度到表單,所以您可以更新進度條正確;-)

+0

好呀!它正在工作!非常感謝你 ! 謝謝你,我會編輯我的貼子發佈解決方案代碼 – KitAndKat 2010-12-06 11:19:50

相關問題