3

AndroidのrunOnUiThreadに相当するC#/ Windowsフォームはありますか?

たとえば、ワーカースレッドで(長時間実行)タスクを実行していて、最後に結果をGUIコントロールに投稿したいとします(もちろん、ワーカースレッドからは実行できません)。UIスレッドで処理するためにその更新表示を投稿できるrunOnUiThreadのような単純な関数はありますか?

4

4 に答える 4

3

WinFormsの各コントロールは、メソッドInvokeBeginInvokeメソッドを継承します。

Invokeはデリゲートを同期的に実行しますが、 BeginInvokeは非同期的に実行します。

于 2012-10-19T15:50:14.533 に答える
2

これを行う一般的な方法は、System.Windows.Forms.Controlを使用することです。

control.BeginInvoke((MethodInvoker)delegate { ... });

ただし、コントロールのハンドルはUIスレッドですでに初期化されている必要があります。シンプルな

IntPtr ignored = control.Handle;

UIスレッドでそれを達成します。

于 2012-10-19T15:54:11.223 に答える
1

Control.Invokeメソッドを見てください。

MSDNから:「コントロールの基になるウィンドウハンドルを所有するスレッドで指定されたデリゲートを実行します。」

于 2012-10-19T15:49:50.507 に答える
1

winformsコントロールまたはフォームにアクセスできる場合は、そのコントロールまたはフォームを呼び出すControl.Invokeか、呼び出しControl.BeginInvokeてください。

于 2012-10-19T15:50:00.560 に答える