1

WebサービスメソッドgetContactsAsyncがあります。それが完了すると、イベントを発生させることになっていることを理解しました。メソッドがいつ完了したかを(まだ非同期で)見つけて、結果を使用するにはどうすればよいですか?

public void GetContacts()
{
    webService.getContactsAsync()
}

public void GetContactsCompleted(object sender, getContactsAsyncCompletedEventArgs e)
{
    contacts = e.Result;
}

これをどうやって使うのかわからない。私が考えることができる方法は、GetContactsを呼び出してから、whileループでcontacts!= nullをチェックして、いつ完了したかを知ることです。しかし、これはスレッドをロックします。

この状況に典型的なある種のベストプラクティスはありますか?読んでくれてありがとう!

私が完全にそれから離れているならば、それが実際にどのように機能するかを自由に説明してください:)

4

5 に答える 5

1

Webリファレンスを介してSOAPベースのWebサービスを使用している場合、このリソースがチケットである可能性があります。

http://msdn.microsoft.com/en-us/library/wyd0d1e5%28VS.80%29.aspx

もう1つの実行可能なアプローチは、独自のバックグラウンドスレッドからサービスの同期メソッドを使用することです。

于 2010-08-28T14:31:58.977 に答える
1

DoSomethingAsyncメソッドには、メソッドの終了時に発生する対応するDoSomethingCompletedイベントがあります。(詳細については、イベントベースの非同期パターンの概要webService.GetContactsCompletedを参照してください。)イベントを実行するには、イベントハンドラーメソッドをイベントにアタッチする必要があります。

public void GetContacts()
{
    webService.getContactsCompleted += GetContactsCompleted;
    webService.getContactsAsync();
}

// NOTE: Should be a private method.
private void GetContactsCompleted(object sender, getContactsAsyncCompletedEventArgs e)
{ /* ... */ }

(イベントハンドラーが1回だけアタッチされていることを確認する必要があることに注意してください。そうしないと、メソッドが終了したときにイベントハンドラーが複数回呼び出され始めます。)

于 2010-08-29T05:37:05.070 に答える
0

私はその方法に精通しておらず、そのWebサービスに固有のように聞こえます。ただし、正しい方向を示すために、ほとんどのAsyncメソッドはデリゲートをパラメーターとして受け取り、終了時にそのデリゲートを呼び出します。

メソッドによっては、エラーやステータスなどを呼び出すためのパラメータが存在する場合があります。

あなたの状況についてのより具体的な情報がなければ、それよりも具体的にすることは困難です。

于 2010-08-28T14:19:27.227 に答える
0

Webサービスの非同期呼び出しをご覧ください。

于 2010-08-28T16:20:27.650 に答える
0

問題がどこにあるのかという質問から理解するのは少し難しいです。

イベントハンドラーに何かを設定することで、操作がいつ完了したかを追跡できます。サンプルコードでは、を設定contactsしているので、であるかどうかを確認できcontactsますnull

操作が完了したときにトリガーされるイベントのように、完了の非同期通知が必要な場合は、... er ... handle GetContractsCompleted、それがまさにその目的であるためです。

より具体的なものが必要な場合(たとえば、WaitHandleシグナルが送信される、またはTask操作が完了すると完了する)、それは可能ですが、もう少し手間がかかります。

于 2010-08-28T17:46:09.800 に答える