有没有相当于访问修饰符的东西限制只使用C#访问一个线程?

时间:2016-04-05 21:31:48

标签: c# .net multithreading access-modifiers

基本上,我很好奇是否会有以下情况发生。

class MyClass
{
    public void MyMethod() { }

    public void MyNonThreadMethod() { }
}

public void OtherThread(MyClass myObject)
{
    Thread thread = new Thread(myObject.MyMethod);
    thread.Start(); // works

    thread = new Thread(myObject.MyNonThreadMethod);
    thread.Start(); // does not work
}

问候,安东

1 个答案:

答案 0 :(得分:3)

从您的示例中,我假设您需要实现一个只能在单个指定线程上执行的方法。要实现这一点,您可以使用线程静态字段来标识指定的线程 - 例如,通过从构造函数设置标志。

class MyClass
{
    [ThreadStatic]
    bool isInitialThread;

    public MyClass()
    {
        isInitialThread = true;
    }

    public void MyMethod() { }

    public void MyNonThreadMethod() 
    {
        if (!isInitialThread)
            throw new InvalidOperationException("Cross-thread exception.");
    }
}

请勿将ManagedThreadId用于此目的 - 请参阅Managed Thread Ids – Unique Id’s that aren’t Unique