C#:异常后停止线程

C#:异常后停止线程,c#,exception-handling,multithreading,C#,Exception Handling,Multithreading,我有以下代码: Thread t = new Thread(() => UpdateImage(origin)); t.Name = "UpdateImageThread"; t.Start(); 如果方法UpdateImage(origin)引发异常,则必须停止线程,否则它将在异常发生后停止 谢谢大家! 假设您使用的是.Net 2.0或更高版本(我假设您使用的是问题中的C#3语法),线程将自动终止,因为您没有处理异常以及进程的其余部分。如果UpdateImage引发异常,它可能会中断您

我有以下代码:

Thread t = new Thread(() => UpdateImage(origin));
t.Name = "UpdateImageThread";
t.Start();
如果方法UpdateImage(origin)引发异常,则必须停止线程,否则它将在异常发生后停止


谢谢大家!

假设您使用的是.Net 2.0或更高版本(我假设您使用的是问题中的C#3语法),线程将自动终止,因为您没有处理异常以及进程的其余部分。

如果
UpdateImage
引发异常,它可能会中断您的整个进程。任何引发顶级异常的线程都表明存在一个大问题。例如,您应该将
try
/
catch
放在
UpdateImage
周围,然后做一些合适的事情来包装它。是的,如果异常到达线程的顶部,则该线程已死亡:

Thread t = new Thread(() => {
    try {UpdateImage(origin); }
    catch (Exception ex) {Trace.WriteLine(ex);}
});
t.Name = "UpdateImageThread";
t.Start();

(或您选择的错误处理)

如果在UpdateImage方法中的某个位置捕获到异常,则该异常不会导致线程停止,除非catch子句从该方法显式返回

如果它未被处理,应用程序仍将崩溃-从而导致线程停止;)


最好在UpdateImage方法中放置一个try…catch块,并在它所属的位置执行逻辑错误处理。然后,您可以自行决定是否返回并结束线程,或者重试

这与主线程类似,例如,如果主线程中发生异常,而您没有人捕获它,那么主线程将终止,您的应用程序也将停止


对于用户线程也一样

自.NET 2.0以来,当后台线程抛出异常(未处理)时,.NET运行时将关闭您的进程。在Windows.Forms应用程序中,这是不同的;您可以使用Application.ThreadException事件捕获异常

这在.NET 1.0/1.1中有所不同,您可以在这里阅读整个主题(例如,如何在.NET 2.0或更高版本中启用遗留行为):

无论您是使用Windows.Forms还是旧式行为-如果进程不退出,则无需显式停止线程;异常将停止它