2

最後の質問では、C#で作業をしているときにプログレスバーを表示しますか?、人々はの使用をお勧めしますBackgroundWorker。DoWorkメソッドではGUIを直接更新できると思いましBackgroundWorkerたが、なぜこの関数呼び出しを使用して呼び出す必要があるのですかInvoke

toolTip.SetToolTip(button, toolTipText);
4

3 に答える 3

6

RunWorkerCompletedコールバックはUIスレッドにマーシャリングされます。DoWorkではありません。

このメソッドを使用して、処理ReportProgress中にUIを更新する必要があります。DoWork

参照:方法:バックグラウンドで操作を実行する

于 2009-12-28T06:30:31.443 に答える
3

これはバックグラウンドスレッド上にあるため、DoWorkメソッドのハンドラーからUIスレッドを直接呼び出すことはできません。

UIを更新する場合は、ReportProgressメソッドを呼び出してから、ProgressChangedイベントのイベントハンドラーからUIを更新する必要があります。

バックグラウンドスレッドでInvokeメソッドを呼び出すことはできますが、そうすると、BackgroundWorkerクラスを使用する目的が無効になります。ProgressChangedイベントはUIスレッドでスローされ、バックグラウンドスレッドで何かが変更されたときにUIコンポーネントを更新するために使用する必要があるメカニズムです。

于 2009-12-28T06:30:27.340 に答える
1

UI以外のスレッドからRunWorkerAsync()を呼び出す場合は、ProgressChangedおよびRunWorkerCompletedイベントハンドラーからInvokeを呼び出す必要があることに注意してください。

于 2009-12-28T07:19:14.653 に答える