Ben*_*ams 12 c# multithreading isbackground threadabortexception
我在C#中使用了一个线程,我将IsBackground属性设置为true.线程在循环中运行一些代码,直到应用程序关闭.当应用程序关闭时,线程也会停止执行(因为我设置了IsBackground = true).
应用程序如何杀死线程?它似乎不是通过调用abort来实现的,因为我没有得到ThreadAbortException.它是在幕后发生的吗?我想在我的循环块中做一些回滚.
我知道我可以自己在线程上调用abort,但我想知道应用程序如何关闭我的后台线程,以及我是否可以从线程内部做出反应.我知道我可以订阅Application.ApplicationExit事件,但是我在服务和winform中运行这个代码,我更喜欢在循环中捕获异常,所以我能够在finally语句中回滚.
它似乎不是通过调用abort来实现的,因为我没有得到ThreadAbortException
确实如此,CLR有两种方法可以中止一个线程.通过Thread.Abort()调用的"正常"方式,该线程可以看到一个ThreadAbortException.但也有一个粗鲁的中止,以同样的方式工作.但是减去TAE并且没有最终块执行.你无法观察它.