0

ステージを設定するために、Scheduler複数のTaskオブジェクトを保持するカスタム クラスを呼び出します (これもカスタム クラスです)。各タスクには、BackgroundWorker長時間実行される作業を実行するためのオブジェクトがあります。私は現在、これらのタスクの多くを迅速に実行し、同時に処理するテストを行っています。

このTaskオブジェクトでTaskCompletedEventは、ハンドラーでカスタム イベント ( )TaskWorkerCompletedを発生させ、タスクが完了したことをスケジューラーに警告します。スケジューラは、すべてのタスクに対して同じイベント ハンドラを使用しますTaskCompletedEvent

私が知りたいのは、現在Scheduler TaskCompletedEventコードを実行しているハンドラーにいて、別のイベントが終了した場合、何が起こるかということです。どちらも UI スレッド上にあるので、現在イベント ハンドラーにある方が、もう一方が進む前に終了するのでしょうか? 2 つのイベントが同時に終了し、処理する必要がある場合に何が起こるかについて混乱しています。

4

1 に答える 1

1

いいえ、イベント自体はUIスレッドについて知りません。したがって、イベントは、発生したのと同じスレッドでディスパッチされます(これは、おそらくバックグラウンドワーカーのスレッドにありますよね?)

両方のイベントがUIスレッドで発生する場合、これを同時に発生させることはできません(結局、UIスレッドはいずれかのイベント発生コードを実行しています)。したがって、最初のイベントが終了したときに2番目のイベントが発生する可能性があります。発砲と派遣。

イベントをUIスレッドにマーシャリングする場合Scheduler、それは少し異なる話です。UIスレッドで実行する必要のあるコードは、実際にはそのスレッドの一種のイベントキューに投稿され、イベント発生コードが最初に実行されます。

于 2012-07-30T16:33:27.853 に答える