まず >>409。
delegateと実行スレッドは何の関連性もない。以下のコードのように
どっちでも出来る。

MethodInvoker invoker = delegate { Console.WriteLine(".."); };
invoker(); //これでこのスレッドで実行される
invoker(delegate (IAsyncResult r) { invoker.EndInvoke(r); }, null);
//これでスレッドプールを使う(別スレッド)

んで >>430
当然のごとく型システムの上にあるコンポーネントもスレッドに依存など
標準ではしないしだから同期する仕組みが必要になる。
そして、WinFormsはMessageLoopのスレッドに依存する。だから別スレッドから
操作することが出来ない。これを解消するために用意されている方法が
ISynchronizeInvokeとSyncObject。FileSystemWatcherあたりがこれを使用する。

>>409の「完全に間違った」前提で話すから「わけ分からん」といわれるのよ。
分かったらもうくるな屑が