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还是旧式行为-如果进程不退出,则无需显式停止线程;异常将停止它