.NET(C#)のイベントに関する質問があります。私はバックグラウンドタスクを実行しているいくつかの状況でコードを書く必要がありました。タスクが完了したか、ファイルのコピーが完了したなど、何かが発生したことをメインスレッドまたはコントローラクラスに通知したいのですが、バックグラウンドタスクがメインスレッドのデリゲートがイベントを処理するのを待つようにします。イベントリスナーの実行を待たずにイベントを発生させるにはどうすればよいですか?
私はメッセージの受け渡しのようなことをしたい:メッセージを送信するが、誰がそれをどうするか気にする。例えば
:
クラスは、配列中のいくつかのプロセス、次々に処理するように書かれています。各プロセスは、バックグラウンドスレッドで実行する必要があります。作業が完了すると、イベントが発生し、コントローラに完了したことが通知されます(OnCompleted()メソッドを使用して)。
問題は、コントローラのイベントハンドラを使用して後続のプロセスを開始すると、メソッドは、すべてのプロセスが完了するまでコールスタックに留まります(実行を終了することはありません)。
この状況では、バックグラウンドタスクは、イベントを発生させるメソッドをスタックに保持せずに、作業が完了したことをコントローラクラスにどのように通知できますか?
例2:バックアッププログラム。
バックグラウンドスレッドが実行され、各ファイルがコピー先にコピーされます。バックグラウンドはに通知します。最後にコピーされたファイルがUIに通知されますが、UIが更新されるのを待つ必要はありません。代わりに、ちょうど「BTW、ここにいくつかの情報があります。さて、私は仕事に戻ろう」と言いたいと思います。イベントリスナーは、イベントライザーの処理をブロックすべきではありません。
のコーディングを示していますか? –
さて、あなたは別のスレッドをキックオフする方法を知っているようです。最初のイベントリスナーにこれを実行させてください(イベントを使用してオブジェクトを作成するとすぐに、BeginInvoke/EndInvokeパターンについては –