2009-02-23 21 views
0

我有一個對話框必須處理大量的數據(該過程非常耗時 - 首先ODBC填充需要時間,然後數據處理踢),結果是窗體變得沒有反應。這實際上不是問題,只需在新線程中打開「加載屏幕」就可以通知用戶該進程。我們發現,有時(它似乎是隨機的),新線程將拋出未處理的ThreadAbortException,導致崩潰報告對話框顯示(或JIT)。未處理的ThreadAbortException發生 - 有時

我不明白爲什麼會引發這個異常,或者爲什麼它會被處理。以前有沒有人處理過這個問題,或者任何人都可以指出這種行爲的可能原因?

謝謝!

編輯:如果它的事項,我打開載入畫面是這樣的:

//start of work load 
Thread th = new Thread(new ThreadStart(MakeStep));  
th.Start(); 

... 
//end of work or error occurance: 
th.Abort(); 

//當你調用Thread.Abort的

回答

2

你打電話th.Abort()中注入線程thThreadAbortException。如果該線程不處理該異常,則會將其報告爲未處理的異常。

通常不建議以這種方式中止其他線程,因爲您不知道線程是否會優雅地處理中止。更好的解決方案是在你的線程之間使用信號。

+0

+1你應該鏈接到一些演示信令代碼示例。異步例外是邪惡的 – 2009-02-23 12:56:31

0

ThreadAbortExceptions上調()。看起來你或你正在使用的圖書館試圖殺死你的線程。

0

如果你不知道爲什麼它正在中止,最好放下它,而不是吞下異常。這就是說,你需要將你的MakeStep方法包裝在try/catch中,並記錄異常(當然還有任何的innter異常)。像這樣的東西...

public void MakeStep() 
{ 
    try 
    { 
    InnerMakeStep(); // may throw TAE or some other exception 
    }catch(Exception e) 
    { 
    // log here k 
    throw; // in case it isn't a TAE 
    } 
} 

隨着記錄異常,問題可以調試。現在,它可能是一千件事情。

相關問題