2009-03-25 7 views
2

今朝私は同僚の奇妙なコードを見ました。 winformsアプリケーションでは、Mainform全体が参照としてスレッドに渡されました。 フォームからメソッドを呼び出すためにこれを行いました。 UIとやりとりするものはありません。単純な計算方法です。 私はこれがベストプラクティスではないと確信していますが、私は何か不思議です。私がメインフォームからスレッド内からメソッドを呼び出すと、これらのメソッドはまだマルチスレッドとして処理されていますか?あるいは、彼らはメインフォームの中を走っていますか? スレッドからMainfromからメソッドを呼び出すと、UIスレッドが影響を受けますか?WinFormsマルチスレッドのシナリオに関する質問

+0

私は知っています!知っている!私ではありませんでした! – TalkingCode

答えて

5

異なるスレッドから呼び出されたフォームの関数は、それらを呼び出すスレッド上で実行され、GUIスレッドには影響しません。副作用として、これは、GUIと対話する関数を呼び出すと例外が発生することを意味します。

GUIスレッドで呼び出す場合は、最も簡単なのはControl.Invoke(...)です。これにより、渡すデリゲートがGUIスレッド上で実行され、GUIのやりとりが可能になります。