实现跨线程调用检查

我需要检查一个方法是从实例化类的同一个线程调用的,类似于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