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
/ catch
around 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还是遗留行为 - 如果进程没有退出,您就不需要显式停止该线程; 例外将阻止它.