Silverlight アプリでは、複数の非同期呼び出しを並行して実行する必要があります。サーバーを呼び出してデータをチェックするなどです。疑似コードのセットアップは次のようになります。
public interface IAsyncVerifier
{
event EventHandler OnCompleted;
void Verify();
}
// Subscribe to verifier completion events
foreach (var verifier in this.VerifierEngine.GetVerifiers())
{
var asyncVerifier = verifier as IAsyncVerifier;
if (asyncVerifier == null || !asyncVerifier.IsVerifierRunning()) continue;
asyncVerifier.OnCompleted += (s, a) => DoWhat(); // ????????
asyncVerifier.Verify();
}
したがって、私の考えでは、これらすべてのタスクに共通のインターフェースがあります。次に、実行前にすべてのイベントをサブスクライブし、... ?
それらが完了するのをどういうわけか待って、私がやっていることを進める必要があります。残りのコードを適切に記述する方法は? をcounter
呼び出すたびにインクリメントし、Verify()
取得するたびにデクリメントするようなものがありますOnCompleted
。でも匂いがしないようにどう包むか全体像がつかめない。また、正しく理解していれば、Silverlight はバックグラウンド スレッドでそれらを実行します (WCF サービスへの呼び出し)。
編集:
サードパーティの検証エンジンを使用しています。this.Verifier.VerifierEngine
私が書いたものではありません。コレクションに追加できるのはベリファイアのみです。async
通常、それらはプロパティなどを検証するためにメイン スレッドで実行されます。私の必要性は、Silverlight でサーバーにコールバックするベリファイアを作成することです。私はスレッドを手動で扱っていません。サービスを呼び出すと、メインスレッドに返されるので問題ありません。この部分は私から隠されています。私が望むのは、すべてのベリファイアが完了するまで「待機」できることだけです。今確認できる唯一の方法は、自分のやり方です。
したがって、私の UI は風変わりです。フィールドの変更が完了した後にユーザーが保存すると、検証が開始されます。すべての検証者を確認IsVerifierRunning
し、再試行する必要があることをユーザーに伝えます。すべてが完了するのを待ってから続行できるようにする必要があります。
- 適切な解決策にスレッドの操作が含まれない限り、スレッドについて心配する必要はありません
- すでに結果にアクセスできます