在我的C#程序中,我有一个代表正在运行的测试的线程,可以通过单击标有“中断执行”的按钮来中止它。为了使线程(因此测试)以优雅的方式终止(并且事先做一些重要的工作),该按钮仅在一些明确定义的时刻被启用,其中我抓住ThreadAbortedException
,做Thread.ResetAbort()
并且精美地死(即线程)。有没有办法确保在.NET线程中执行完整的代码块?
问题是,在可能中止的时间窗口中,有一些任务需要在开始时从头到尾完成,因此,我担心TAE。锁不提供这样的解决方案,而且,虽然finally块做的,我不觉得它优雅在下列方式包装的重要代码:
try {
} finally {
// vital code
}
但是,我没有发现任何其他的解决办法。
这是否延迟ThreadAbortException
的干扰直到块结束?
虽然BeginCriticalRegion()可能在某种程度上,保证执行代码,因为您的应用程序可能会停止,否则,我想它不允许ThreadAbortExceptions打断我的代码的设备。 – 2008-09-17 17:16:57