私のC#アプリケーションには、いくつかのバックグラウンドワーカーがいます。時々、あるバックグラウンドワーカーが別のバックグラウンドワーカーを解雇します。最初のバックグラウンドワーカーが完了してRunWorkerCompleted
イベントが発生すると、そのイベントはどのスレッドで発生しますか、UIまたはRunWorkerAsync
が呼び出された最初のバックグラウンドワーカーですか。 Microsoft Visual C#2008 ExpressEditionを使用しています。あなたが持っているかもしれないどんな考えや提案もいただければ幸いです。ありがとう。
BackgroundWorker
がUIスレッドから作成された場合、RunWorkerCompleted
イベントもUIスレッドで発生します。
バックグラウンドスレッドから作成された場合、イベントは未定義のバックグラウンドスレッドで発生します(カスタムSynchronizationContext
を使用している場合を除き、必ずしも同じスレッドである必要はありません)。
興味深いことに、これはMSDNで十分に文書化されているようには見えません。私が見つけた最高のリファレンスは ここ :
アプリケーションにマルチスレッドを実装するための推奨される方法は、 BackgroundWorker コンポーネントを使用することです。 BackgroundWorker コンポーネントは、マルチスレッドにイベント駆動型モデルを使用します。 バックグラウンドスレッドは DoWork イベントハンドラーを実行し、コントロールを作成するスレッドは ProgressChanged および RunWorkerCompleted を実行します=イベントハンドラー。ProgressChanged および RunWorkerCompleted イベントハンドラーからコントロールを呼び出すことができます。