如何将方法限制为特定线程?

时间:2009-05-23 05:02:22

标签: c# .net multithreading

我有一种方法,出于线程安全的原因,只能由特定线程使用。如果另一个线程试图使用它,我希望抛出异常。

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

如何在上面的代码中找到CurrentThreadId?或者还有其他方法可以实现我想做的事情吗?

3 个答案:

答案 0 :(得分:5)

主题。CurrentThreadManagedThreadId

或者您可以只存储对线程对象本身的引用,并将其与Thread.CurrentThread进行比较。

答案 1 :(得分:4)

在创建时命名您的主题

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

并在需要特定于线程的代码的位置检查此条件:

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

答案 2 :(得分:0)

我猜你需要一些静态变量(伪装的全局变量)来做这件事。这对我来说感觉不太好,但是将这个方法放在一个单独的对象中会让你拥有它。