1

オブジェクトの状態が変化する前にイベントを発生させ、状態が変化したらイベントを発生させるという規則に従って、キャンセル可能なイベントを公開するクラスがあります。パブリッシャー (サーバー) によって公開される変更前イベントはフォーム上にStateChangingあり、引数として a を持ちますがCancelEventArgs、変更後イベントはフォーム上にありStateChangedます。これにより、イベントのサブスクライバー (クライアント) は、開始前に操作をキャンセルすることができます。

現在、これらの操作の 1 つを長時間実行する操作に変更しました。サブスクライバーが操作の開始後も操作をキャンセルできるようにしたいと思います (また、操作の進行状況を知ることもできます)。イベントベースの非同期パターンまで考えました。

問題は、ある時点で操作を必要とするのはパブリッシャーであるため、変更前と変更後のイベントパターンを維持したいということですが、非同期パターンでは、特定の非同期に実行される操作。もう 1 つの可能性 (ただし、私には洗練されていないように思えます) はOperationRequired、サーバー側で何を実行する必要があるかをクライアントが認識し、それに応じてRunOperationAsync()メソッドを呼び出すことができるようにするイベント (例: ) をサーバーに公開させることです。コメントして提案を追加してください。

4

1 に答える 1

0

イベント ベースの非同期パターンは、一般に、UI によって制御される操作に適しています。サーバーまたはライブラリ API には、代替の非同期プログラミング モデルが一般的に好まれます。EAP を実装することを選択した場合は、それで問題ありません。

BackgroundWorkerの実装を見てみましょう。これは、特にキャンセルをサポートする EAP の最良の例です。標準的な方法でキャンセルできますCancelAsync()

于 2011-10-22T09:32:07.867 に答える