有什么与访问修饰符等效的东西,它可以使用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