编程语言
首页 > 编程语言> > 有什么与访问修饰符等效的东西,它可以使用C#将访问限制为仅一个线程?

有什么与访问修饰符等效的东西,它可以使用C#将访问限制为仅一个线程?

作者:互联网

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

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
}

问候,安东

解决方法:

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

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.

标签:multithreading,access-modifiers,c,net
来源: https://codeday.me/bug/20191118/2031252.html