簡體   English   中英

發生未處理的ThreadAbortException-有時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM