2011-09-21 32 views
-2

我們聲明並在具有while(1)循環的方法中運行線程。如何避免在再次調用方法時創建並運行第二個線程? 我只想在這個方法中啓動一個線程,並且每次再次調用該方法時,都不應該重新創建線程。我應該檢查線程名稱還是應該將線程聲明爲類的字段?C#避免在第二次輸入方法時創建線程

任何想法如何做到這一點?

感謝, 克林斯曼

+1

你試圖建模的情況是什麼? – jason

+1

在你進入循環之前,普通的解決方案正在創建線程,設置一個布爾標誌來表明你創建了它並且檢查一個Thread類型的變量爲null。 –

+2

遠沒有足夠的信息。如果我們必須猜測你想要做什麼,我們不能給你一個很好的答案。 – Mark

回答

2

聽起來像線程確實應該是類的一個字段 - 儘管如果可能有幾個線程調用方法開始時,您必須小心地以線程安全的方式訪問它。

你想第二次發生什麼 - 應該阻止方法,還是立即完成,或者拋出異常?如果你不需要等待線程完成,那麼你可能只需要一個標誌而不是保持對線程本身的引用。 (請注意,我一直假設這是一種實例方法,並且您希望每個實例有一個額外線程。)如果不是這種情況,則必須相應地進行調整。

+1

blimey,那很快!你剛剛完成異步談話,並像往常一樣回到業務:) –

+1

@RussCam:這是一個長途火車回到閱讀的好處:) –

+0

@Jon:第二次應該只是一個檢查,如果線程已經創建。我想用靜態標誌來表示已經創建的線程的想法是好的。謝謝! – Juergen

1

有方法返回一個單,並在單身構造啓動線程。

1

您能否在第一次保存同步上下文時檢查後續時間以查看它是否匹配,並在必要時發回給它?

SynchronizationContext syncContext = null; 
... 

// "object state" is required to be a callback for Post 
public void HiThar(object state) { 
    if (syncContext == null) { 
    syncContext = SynchronizationContext.Current; 
    } else { 
    syncContext.Post(HiThar, state); 
    } 
} 
相關問題