簡體   English   中英

如何檢查Thread是否完成執行

[英]How to check if Thread finished execution

我有以下問題:

我想檢查(C#)線程是否已完成執行,即線程方法是否已返回。 我現在所做的是調用Thread.Join(1) ,但這會產生1 ms的延遲。 有沒有辦法簡單地檢查線程是否已完成。 檢查Thread.ThreadState似乎太麻煩了。

使用Thread.IsAlive標志。 這是給出線程狀態。

您可以在完成並訂閱該事件時從您的線程中觸發事件。

或者,您可以不帶任何參數調用Thread.Join()

阻塞調用線程直到線程終止,同時繼續執行標准COM和SendMessage抽取。

Thread.Join(1)將:

阻塞調用線程,直到線程終止或指定的時間過去,同時繼續執行標准COM和SendMessage抽取。

在這種情況下,指定的時間是1毫秒。

對於一個線程,你有myThread.IsAlive屬性。 如果返回線程方法或線程被中止,則為false。

使用Thread.Join(TimeSpan.Zero)它不會阻止調用者並返回一個值,指示該線程是否已完成其工作。 順便說一下,這也是測試所有WaitHandle類的標准方法。

如果您不想通過等待/檢查其他正在運行的線程完成來阻止當前線程,則可以實現這樣的回調方法。

Action onCompleted = () => 
{  
    //On complete action
};

var thread = new Thread(
  () =>
  {
    try
    {
      // Do your work
    }
    finally
    {
      onCompleted();
    }
  });
thread.Start();

如果您正在處理不支持跨線程操作的控件,則必須調用回調方法

this.Invoke(onCompleted);

我廣泛使用IsAlive,除非我想阻止當前執行(調用線程),在這種情況下我只是調用Join()而沒有參數。 現在,請注意,如果目標線程由於任何原因尚未實際開始執行,則IsAlive可能會返回false。

Carlos Merighe。

看一下BackgroundWorker類 ,使用OnRunWorkerCompleted就可以了。

這取決於你想如何使用它。 使用Join是一種方法。 另一種方法是讓線程通過使用事件通知調用者線程。 例如,當您的圖形用戶界面(GUI)線程調用運行一段時間並且需要在完成時更新GUI的進程時,您可以使用該事件來執行此操作。 該網站為您提供有關如何處理活動的想法:

http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx

請記住,它將導致跨線程操作,如果您想要從另一個線程更新GUI,則必須使用要更新的控件的Invoke方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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