基本上,我很好奇是否会有以下情况发生。
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
}
问候,安东
答案 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。