Whenever I want to modify a winform from another thread, I need to use
->Invoke(delegate, params)
so that the modification occurs in the winf
I recall turning off the checks and manually verifying that every call I used was safe.
A surprising number of them could be called cross-threaded because of the guarantee I had about where certain threads were (semaphores) or because they called underlying API functions that could be used on other processes.
I still ended up with lots of invokes, usually on context objects so I could MethodInvoker.
I also encountered a nasty bug in Control.Invoke, driving me to write a custom invoker library.