您是否有一个想法:如何在应用程序的主线程中捕获在特定线程中抛出的异常?捕获未处理的线程异常
例如,我有一个非常简单的线程做一些基本的东西:
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