AFAIK、このイベントは作成者スレッド(BackgroundWorker RunWorkerCompleted Event)で呼び出されると約束されています。ほとんどの場合、約束どおりに行動します。ただし、RunWorkerCompletedは、BackgroundWorkerオブジェクトを作成したスレッドででなく、と呼ばれることがあります。BackgroundWorker.RunWorkerCompletedとthreading
更新:コードは次のようである:
Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
var worker = new BackgroundWorker();
worker.DoWork += (s, args) => Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
worker.RunWorkerCompleted += (s, args) => Trace.WriteLine(Thread.CurrentThread.ManagedThreadId);
worker.RunWorkerAsync();
出力は1 7 7
すべてのアイデア(正しい出力は1 7 1でなければなりませんか)?
ダーリンは正しいです。BackgroundWorkerを作成したスレッドで実行される主な目的は、メインのUIスレッドから作成した場合、メインのUIスレッドで実行されるため、スレッドの問題が発生することなく、イベントのUI要素と対話できます。 – Parmenion
> RunWorkerCompletedは、BackgroundWorkerオブジェクト<を作成したスレッドでは呼び出されません。あなたの "答え"を書く前に質問を読む – user626528
しかし、質問は:それはUIスレッドまたは既にバックグラウンドスレッドで作成されたスレッドですか?それがUIスレッドの場合、元のスレッドで呼び出されたようです。 – riezebosch