0

UI スレッドをブロックすることなく、複数の WCF メソッドを順番に呼び出す必要があります。

次のメソッドが呼び出される前に、各メソッドが完了する必要があります。

svcutil を使用して WCF サービスをセットアップしたので、同期メソッドの非同期バージョンを使用できます。

非同期バージョンを呼び出すと、回避したいメソッドが同時に実行されます。

同期バージョンを呼び出すと、UI スレッドがブロックされるため、UI が応答しなくなります。これは回避したいことです。

UIスレッドをブロックせずに、非同期バージョンを呼び出して、次の呼び出しの前に各呼び出しが完了するのを待つにはどうすればよいですか?

WCF メソッドによって処理されるオブジェクトが出現するたびにループする必要があるとします。

foreach (MyObject obj in SomeCollection)
{
    myWCFProxy.TreatObject(obj); // This is a duplex service and I am handling its callback in a separate method.
    // I would like to wait here (without blocking the UI thread) until the method returns.
}

これどうやってするの ?

4

3 に答える 3

2

一連の同期WCF呼び出しを非同期メソッドでラップするだけではいけませんか?これにより、コードがUIスレッドで実行されなくなりますが、WCF呼び出しは線形に実行されます。

もう1つのオプションは、前のWCFメソッドのコールバックでフォローアップWCFメソッドを呼び出すことです。

于 2012-12-11T17:16:12.333 に答える
1

あなたの説明に基づいて、最も簡単な解決策は、BackgroundWorkerを使用して WCF 呼び出しを同期的に実行することです。

于 2012-12-11T18:07:36.567 に答える
0

それがオプションである場合は、WCF サービスを変更してMyObject、一度に多くの s を取得し、必要に応じて処理することをお勧めします。次に、クライアント上のコードは次のようになります。

myWCFProxy.TreatObjects(SomeCollection); //be sure to handle the callback

そしてWCF側では:

foreach (var obj in SomeCollection)
    TreatObject(obj); //it's synchronous, so it waits!
于 2012-12-11T18:30:41.883 に答える