最後の質問では、C#で作業をしているときにプログレスバーを表示しますか?、人々はの使用をお勧めしますBackgroundWorker。DoWorkメソッドではGUIを直接更新できると思いましBackgroundWorkerたが、なぜこの関数呼び出しを使用して呼び出す必要があるのですかInvoke。
toolTip.SetToolTip(button, toolTipText);
最後の質問では、C#で作業をしているときにプログレスバーを表示しますか?、人々はの使用をお勧めしますBackgroundWorker。DoWorkメソッドではGUIを直接更新できると思いましBackgroundWorkerたが、なぜこの関数呼び出しを使用して呼び出す必要があるのですかInvoke。
toolTip.SetToolTip(button, toolTipText);
RunWorkerCompletedコールバックはUIスレッドにマーシャリングされます。DoWorkではありません。
このメソッドを使用して、処理ReportProgress中にUIを更新する必要があります。DoWork
これはバックグラウンドスレッド上にあるため、DoWorkメソッドのハンドラーからUIスレッドを直接呼び出すことはできません。
UIを更新する場合は、ReportProgressメソッドを呼び出してから、ProgressChangedイベントのイベントハンドラーからUIを更新する必要があります。
バックグラウンドスレッドでInvokeメソッドを呼び出すことはできますが、そうすると、BackgroundWorkerクラスを使用する目的が無効になります。ProgressChangedイベントはUIスレッドでスローされ、バックグラウンドスレッドで何かが変更されたときにUIコンポーネントを更新するために使用する必要があるメカニズムです。
UI以外のスレッドからRunWorkerAsync()を呼び出す場合は、ProgressChangedおよびRunWorkerCompletedイベントハンドラーからInvokeを呼び出す必要があることに注意してください。