0

クラスには、長い操作を実行し、進行状況を呼び出し元に定期的に報告する必要があるメソッドがいくつかあります。たとえば、プレゼンテーション層に表示したり、ファイルにログインしたりします。

私は過去に次の解決策を使用しましたが、それがそれを行うための好ましい方法であるかどうか心配しています:

私はそのように定義されたコールバックデリゲートを持っています:

public delegate bool ProgressCallback(double percentCompleted, object arg);

次に、私の「ワーカー」メソッドは次のようになります。

public bool DoSomething(bool firstArg, int anotherArg, ProgressCallback progressCallback, object callbackArg);

progressCallback長いプロセスを繰り返すたびに呼び出しますが、falseが返された場合は、操作を中止する必要があることを意味します。

プロセスは同期的である必要があり、非同期実装の必要はないことに注意してください。

このテクニックをコードで何度も繰り返すのを見るだけなので、これが推奨されるパターンであるかどうかが心配です。これはあなたがそのようなことをどのように実行するのですか?代わりにイベントを使用する必要がありますか、それともそのような単純な実装で問題ないと思われますか?

4

2 に答える 2

1

それが正しい方法です!

しかし、おそらく時間(およびコード)を節約するために、BackgroundWorker

于 2012-09-17T07:35:21.857 に答える
0

イベント引数にboolフラグを指定したイベントを使用します。このboolフラグは、コンシューマーが設定でき、中止シグナルとして機能します。

于 2012-09-17T07:36:43.980 に答える