2011-05-11 51 views
2

您好我有以下測試代碼:resetAbort做什麼?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Thread t = new Thread(Work); 
     t.Start(); 
     Thread.Sleep(1000); 
     t.Abort(); 
     Thread.Sleep(1000); 
     t.Abort(); 
     Thread.Sleep(1000); 
     t.Abort(); 
     t.Join(); 
     Console.WriteLine("End"); 
    } 

    static void Work() 
    { 
     int i = 0; 
     while (i<10) 
     { 
      try 
      { 
       while(true); 
      } 
      catch(ThreadAbortException) 
      { 
       Thread.ResetAbort(); 
      } 

      Console.WriteLine("I will come back!"); 
      i++; 
     } 
    } 
} 

每次,當存在異常中斷,Thread.ResetAbort()將被執行。我想知道這是什麼ResetAbort。因爲當我運行它時,我看到以下輸出: 我會回來的! 我會回來的! 我會回來的! 我沒有看到輸出「End」 - 看起來這個程序並沒有結束。你知道爲什麼嗎?謝謝!

回答

3

它取消中止線程的請求。 As indicated here.所以在這種情況下,循環將繼續,並且線程應該仍然活着。

+0

哦..我省略了內循環...所以程序永遠不會結束。謝謝! – spspli

+0

它取消了放棄請求 - 所以它會從內部恢復(true),對不對? – spspli

+0

不客氣。 –

0

ResetAborts取消一個線程

1

別人的答案約ResetAbort是正確的中止請求。 「結束」不輸出的原因是因爲t.Join()從不返回。這是因爲你的線程只被嘗試中止三次,並且你的循環在無限循環中包含10次嘗試。當目標線程完成其代理運行時,將返回Join,並且您的代碼未完成。

+0

是的!這是我的不好。抱歉!謝謝你在同一時間! – spspli