我們聲明並在具有while(1)循環的方法中運行線程。如何避免在再次調用方法時創建並運行第二個線程? 我只想在這個方法中啓動一個線程,並且每次再次調用該方法時,都不應該重新創建線程。我應該檢查線程名稱還是應該將線程聲明爲類的字段?C#避免在第二次輸入方法時創建線程
任何想法如何做到這一點?
感謝, 克林斯曼
我們聲明並在具有while(1)循環的方法中運行線程。如何避免在再次調用方法時創建並運行第二個線程? 我只想在這個方法中啓動一個線程,並且每次再次調用該方法時,都不應該重新創建線程。我應該檢查線程名稱還是應該將線程聲明爲類的字段?C#避免在第二次輸入方法時創建線程
任何想法如何做到這一點?
感謝, 克林斯曼
聽起來像線程確實應該是類的一個字段 - 儘管如果可能有幾個線程調用方法開始時,您必須小心地以線程安全的方式訪問它。
你想第二次發生什麼 - 應該阻止方法,還是立即完成,或者拋出異常?如果你不需要等待線程完成,那麼你可能只需要一個標誌而不是保持對線程本身的引用。 (請注意,我一直假設這是一種實例方法,並且您希望每個實例有一個額外線程。)如果不是這種情況,則必須相應地進行調整。
blimey,那很快!你剛剛完成異步談話,並像往常一樣回到業務:) –
@RussCam:這是一個長途火車回到閱讀的好處:) –
@Jon:第二次應該只是一個檢查,如果線程已經創建。我想用靜態標誌來表示已經創建的線程的想法是好的。謝謝! – Juergen
有方法返回一個單,並在單身構造啓動線程。
您能否在第一次保存同步上下文時檢查後續時間以查看它是否匹配,並在必要時發回給它?
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);
}
}
你試圖建模的情況是什麼? – jason
在你進入循環之前,普通的解決方案正在創建線程,設置一個布爾標誌來表明你創建了它並且檢查一個Thread類型的變量爲null。 –
遠沒有足夠的信息。如果我們必須猜測你想要做什麼,我們不能給你一個很好的答案。 – Mark