.NET(C#)のイベントについて質問があります。バックグラウンドタスクを実行していて、タスクの完了やファイルのコピーの終了など、何かが発生したことをメインスレッドまたはコントローラークラスに通知したいといういくつかの状況でコードを作成する必要がありましたが、メインスレッドのデリゲートがイベントを処理するのをバックグラウンドタスクが待機するようにします。
メッセージパッシングのようなことをしたい:メッセージを送信するが、誰がそれをどうするかを気にする。
例えば:
クラスは、複数のプロセスを順番に処理するように作成されています。各プロセスはバックグラウンドスレッドで実行する必要があります。作業が完了すると、イベントが発生し、それが完了したことをコントローラーに通知します(たとえば、OnCompleted()メソッドを使用)
問題は、コントローラーのイベントハンドラーを使用して後続のプロセスを開始する場合、すべてのプロセスが完了するまで、前のプロセスのOnCompleteメソッドが呼び出しスタックにとどまる(実行が終了しない)ことです。
そのような状況で、バックグラウンドタスクは、イベント発生メソッドをスタックに保持せずに作業が完了したことをコントローラークラスにどのように通知できますか?
例2:バックアッププログラム。
バックグラウンドスレッドが実行され、各ファイルが宛先にコピーされます。バックグラウンドは、コピーされた最後のファイルをUIに通知する必要がありますが、UIが更新されるのを待つ必要はありません。代わりに、「ところで、ここにいくつかの情報があります。それでは、仕事に戻りましょう」と言いたいだけです。イベントリスナーは、イベントレイザーの処理をブロックしてはなりません。