实现跨线程调用检查
我需要检查一个方法是从实例化类的同一个线程调用的,类似于WinForms控件实现的function。
怎么能实现这个? 以下示例是否有效?
public class Foo { int ManagedThreadId; public Foo() { ManagedThreadId=Thread.CurrentThread.ManagedThreadId; } public void FooMethod() { if (ManagedThreadId!=Thread.CurrentThread.ManagedThreadId) throw new InvalidOperationException("Foo accessed from a thread other than the thread it was created on."); //Method code here. } }
我不太确定存储ManagedThreadId就足以实现这一点。 如果我存储对线程的引用,这是否会给GC或其他东西带来问题?
ManagedThreadId
应该适用于此任务, Thread
的MSDN文档声明它不会随时间变化。
在查看WPF窗口的引用源之后validation它是否在线程之间没有使用 ,我认为保持对您的类实例化的Thread
的引用也是可以的,就像它的作用一样 :存储一个Dispatcher
,它反过来保持一个引用其Thread
。