1

BackgroundWorkerまたはThreadを使用して、ビジネスレイヤーにあるクラスのWindowsフォームからメソッドを呼び出したいと思います。このビジネスレイヤーのメソッドは、完了するまでに時間がかかる場合があるため、誰かが聞いている場合にその進行状況を報告できるようにしたいと思います。私はBackgroundWorkerから始めて、後で通常のスレッドを使用することにしたので、どちらにも縛られたくありません。

バックグラウンドワーカーによって呼び出されたかどうかを知らない場合、メソッドが進行状況を報告するための最良の方法は何でしょうか。私は自分のビジネスレイヤークラスで、誰かが聞いている場合にその進捗状況を公開できるイベントを提供することを考えていました。

そのためのフレームワークにすでに代理人がいますか?より良い、しかし私が実装できるインターフェース-INotifyProgressChangedのようなもの?

4

2 に答える 2

0

イベントハンドラーを起動して正しい方向に進んでいると思います。クラスでイベントを宣言できます(VBを使用します。もちろん、C#も同様です)。

Public Event foo(ByVal progressVar1 As Double, ByVal progressVar2 As String)

次に、WinFormにいくつかのハンドラーを追加します。ここで発生する問題は、発生したイベントがバックグラウンドワーカーまたはスレッドと同じスレッドで実行されるため、実際にUIを操作するにはInvoke()メソッドを使用する必要があることです。

于 2009-11-05T05:42:36.493 に答える