2

SynchronizationContextクラスを使用して、UI 更新のクロススレッド マーシャリングを実行する予定です。Application.Run(form)アイデアは、私が言えるように、メイン フォーム (つまり のフォーム) への参照を持たなくても済むようにすることです。mainForm.BeginInvoke();

ただし、ドキュメントから明確でないことの 1 つは、 を呼び出すときにSynchronizationContext.Post()、どのスレッドへの呼び出しをマーシャリングするかということです。それは常にメイン アプリケーション スレッドSynchronizationContextですか、それともオブジェクトを最初に初期化したスレッドですか、それとも何ですか?

4

2 に答える 2

2

SynchronizationContext のタイプに依存します。クラスを拡張すると、任意のスレッドでメソッド呼び出しを実装できます (多かれ少なかれ)。Windows フォームは、メインの UI スレッドに戻ります。wpf はディスパッチャ スレッドなどを使用します。

于 2009-08-14T11:42:20.557 に答える
0

ああ、CodeProject には便利なものがあります。

http://www.codeproject.com/KB/threads/SynchronizationContext.aspx

私はそれを見てみましょう。

SynchronizationContext更新:最初のフォームが開かれたときに、メイン スレッドにオブジェクトが与えられることが判明しました。send および post 呼び出しがマーシャリングされるのは、この同期コンテキストのスレッドです。

于 2009-08-14T10:13:07.023 に答える