![](/img/trans.png)
[英]System.Threading.ThreadAbortException occurred in mscorlib.dll occuring persitently
[英]Unhandled ThreadAbortException occuring - sometimes
我有一個必須處理大量數據的對話框(該過程非常耗時-首先ODBC填充花費時間,然后開始數據處理),結果是表單無響應。 確實這不是問題,只需在新線程中打開“加載屏幕”以通知用戶該過程就足夠了。
最近,我發現, 有時 (看起來是隨機的)新線程會拋出未處理的ThreadAbortException,從而導致崩潰報告對話框(或JIT)出現。
我不明白為什么會拋出該異常,或者為什么無法處理該異常。 以前有沒有人處理過這個問題,或者有人可以將我指出這種行為的可能原因?
謝謝!
編輯:萬一重要,我將打開加載屏幕,如下所示:
//start of work load
Thread th = new Thread(new ThreadStart(MakeStep));
th.Start();
...
//end of work or error occurance:
th.Abort();
//
您正在調用th.Abort()
,它在線程th
上注入了ThreadAbortException
。 如果該線程不處理該異常,它將被報告為未處理的異常。
通常不建議以這種方式中止其他線程,因為您不知道該線程是否可以正常處理中止。 更好的解決方案是在線程之間使用信令。
當您調用Thread.Abort()時,將引發ThreadAbortExceptions。 看起來您或您正在使用的庫正在試圖殺死您的線程。
如果您不知道它為什么要中止,那么放開它比吞下異常更好。
話雖這么說,您需要將MakeStep方法包裝在try / catch中,並記錄異常(當然還有任何內部異常)。 像這樣
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
}
}
在記錄了異常的情況下,可以調試問題。 現在,可能有一千種東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.