Implement a cross-thread call check
c#, multithreading
Solution
The `ManagedThreadId` should be fine for this task, the MSDN documentation for `Thread` states that it doesn't vary over time.
After looking at the reference source for the WPF window verifies its not used across threads, I think it is also okay to keep a reference to the `Thread` your class is instantiated on, as that's what it does: storing a `Dispatcher` which in turn keeps a reference to its `Thread`.
Problem
I need to check that a method is called from the same thread that instantiated the class similar to the feature implemented by a WinForms Control. How can achieve this? is the following example valid? ``` 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. } } ``` Im not so sure that storing the ManagedThreadId is enough to achieve this. If i store a reference to the Thread, can this create problems to the GC or to something else?