4

IsOneWay=true + コールバック インターフェイスを介してアクセスする必要がある機能を実装する WCF Web サービス (自分の管理下にない) があり、そのメソッドの 1 つが処理の完了を通知します。最初は GUI からアクセスするように設計されていたため、このように記述されています。

ただし、バッチで使用するには、コンソール アプリケーションから同じメソッドにアクセスする必要があります。現在、これを達成するための私の大雑把な方法は、フラグを false に設定することです。WCF メソッドを呼び出した後、簡単な Thread.Sleep() 呼び出しを含む while ループを実装します。これは明らかに機能しますが、最終結果を達成するための非常に貧弱な方法のようです。

これを行う適切な方法が何であるかを知りたいです。注: サービスは制御不能であり、参照は IDE を介して追加されたばかりですが、コード実装などを簡単にノックアップできます。

4

1 に答える 1

4

完了待ちにはManualResetEventを使用します。サービスで一方向の非同期メソッドを呼び出してから、manualresetevent オブジェクトを待機します。コールバックで Set() メソッドを呼び出すと、次のように WaitOne() 呼び出し後にメイン スレッドが実行を継続できます。

var waitHandle = new ManualResetEvent();

yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}
于 2011-10-11T06:38:03.637 に答える