您是否有一個想法:如何在應用程序的主線程中捕獲在特定線程中拋出的異常?捕獲未處理的線程異常
例如,我有一個非常簡單的線程做一些基本的東西:
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委託來糾正進度條...;) 謝謝!
好呀!它正在工作!非常感謝你 ! 謝謝你,我會編輯我的貼子發佈解決方案代碼 – KitAndKat 2010-12-06 11:19:50