2009-05-23 72 views
2

我有一個方法,爲了線程安全的原因,只能由特定的線程使用。如果另一個線程試圖使用它,我想拋出一個異常。如何限制一個方法到一個特定的線程?

public void UnsafeMethod() 
{ 
    if (CurrentThreadId != this.initialThreadId) 
     throw new SomeException("Can only be run on the special thread."); 
    // continue ... 
} 

我如何在上面的代碼中找到CurrentThreadId?或者,還有其他方法可以實現我想要做的事情嗎?

回答

5

主題。 CurrentThreadManagedThreadId

或者您可以只存儲對線程對象本身的引用,並將其與Thread.CurrentThread進行比較。

+0

非常感謝。我沒看到CurrentThread。我必須失明。 – 2009-05-23 05:35:46

0

我想你需要沿着一個靜態變量(一個變相的全局變量)來做這件事。它對我來說並不好,但把這個方法放在一個單獨的對象中會讓你擁有它。

4

名稱你的線程在創建

System.Threading.Thread thread = new System.Threading.Thread(..); 
thread.Name = "MySpecialThread"; 

的時間和檢查這種情況下,你想線程特定代碼:

if (System.Threading.Thread.CurrentThread.Name == "MySpecialThread") 
{ 
    //.. 
} 
+0

好主意。好的是你不必在任何地方存儲線程ID。不幸的是,雖然我可以有多個這樣的線程,所以我必須爲它們生成唯一的名稱(而不是僅僅使用常量,如果只有一個線程),這會讓事情變得不太清晰。 – 2009-05-23 11:21:23

相關問題