[英]How to check if Thread finished execution
我有以下問題:
我想檢查(C#)線程是否已完成執行,即線程方法是否已返回。 我現在所做的是調用Thread.Join(1)
,但這會產生1 ms的延遲。 有沒有辦法簡單地檢查線程是否已完成。 檢查Thread.ThreadState
似乎太麻煩了。
使用Thread.IsAlive
標志。 這是給出線程狀態。
您可以在完成並訂閱該事件時從您的線程中觸發事件。
或者,您可以不帶任何參數調用Thread.Join()
:
阻塞調用線程直到線程終止,同時繼續執行標准COM和SendMessage抽取。
阻塞調用線程,直到線程終止或指定的時間過去,同時繼續執行標准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.