在我的C#程序中,我有一個代表正在運行的測試的線程,可以通過單擊標有「中斷執行」的按鈕來中止它。爲了使線程(因此測試)以優雅的方式終止(並且事先做一些重要的工作),該按鈕僅在一些明確定義的時刻被啓用,其中我抓住ThreadAbortedException
,做Thread.ResetAbort()
並且精美地死(即線程)。有沒有辦法確保在.NET線程中執行完整的代碼塊?
問題是,在可能中止的時間窗口中,有一些任務需要在開始時從頭到尾完成,因此,我擔心TAE。鎖不提供這樣的解決方案,而且,雖然finally塊做的,我不覺得它優雅在下列方式包裝的重要代碼:
try {
} finally {
// vital code
}
但是,我沒有發現任何其他的解決辦法。
這是否延遲ThreadAbortException
的干擾直到塊結束?
雖然BeginCriticalRegion()可能在某種程度上,保證執行代碼,因爲您的應用程序可能會停止,否則,我想它不允許ThreadAbortExceptions打斷我的代碼的設備。 – 2008-09-17 17:16:57