C#:在异常后停止一个线程

Van*_*nel 9 c# multithreading exception-handling

我有这个代码:

Thread t = new Thread(() => UpdateImage(origin));
t.Name = "UpdateImageThread";
t.Start();
Run Code Online (Sandbox Code Playgroud)

如果方法UpdateImage(origin)抛出异常,则必须停止线程,否则它将在异常后停止?

谢谢!

Mar*_*ell 16

如果UpdateImage抛出异常,它可能会取消整个过程.任何引发顶级异常的线程都表明存在很大问题.你应该包装它,例如通过put try/ catcharound UpdateImage并做一些合适的事情.是的,如果一个异常到达一个线程的顶部,线程就死了:

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

(或您选择的错误处理)


Fab*_*ied 10

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

这与.NET 1.0/1.1不同,您可以在此处阅读有关整个主题的内容(例如,如何使用.NET 2.0或更高版本启用旧版行为):http://msdn.microsoft.com/en-us/library/ ms228965.aspx#ChangeFromPreviousVersions.

无论您使用的是Windows.Forms还是遗留行为 - 如果进程没有退出,您就不需要显式停止该线程; 例外将阻止它.