0

自分で作成したのではない (編集できない) Web サービスを使用しています。私はこのコードを持っています:

public void GetData()
{
    try
    {
        TelemeterServiceClient client = new TelemeterServiceClient();
        RetrieveUsageRequestType request = new RetrieveUsageRequestType { UserId = Username, Password = Password };
        RetrieveUsageResponseType response = client.retrieveUsage(request);
        Result = response.Item;

        Callback(null);
    }
    catch (Exception e)
    {
       Result = null;
       Callback(e);
    }
}

これは、WPF プロジェクトで正常に機能します。ただし、現在、Silverlight を使用する Windows Phone プロジェクトに取り組んでいます。このプロジェクトでは、retrieveUsage() メソッドが見つかりません。

どうやら、Silverlight は Web サービスへの非同期呼び出しのみをサポートしています。実際、retrieveUsageAsync() メソッドが存在します。

しかし、このメソッドを使用して結果を取得するにはどうすればよいでしょうか? 誰かが非同期呼び出しの使用方法の簡単な例を教えてくれますか?

ありがとう

4

1 に答える 1

1

例を次に示します。

    Dim proxy = new TelemeterServiceClient()

    AddHandler proxy.retrieveUsageCompleted, Sub(o, e)
                                                          action(o, e)
                                                      End Sub

    Using New OperationContextScope(proxy.InnerChannel)
        Dim request = New retrieveUsageRequest
        proxy.retrieveUsageAsync(request)
    End Using

次のように c# に変換されていると考えてください。

    var proxy = new TelemeterServiceClient();

    proxy.retrieveUsageCompleted += MethodYouImplementWhenAsyncIsComplete;
    //or proxy.retrieveUsageCompleted += (s, e) => { do something };

    using (new OperationContextScope(proxy.InnerChannel))
    {
        var request = New retrieveUsageRequest();
        proxy.retrieveUsageAsync(request);
    }

の行でaction、 action は、非同期の結果を処理するデリゲートまたはアクションを表します

これを C# に変換するのに問題がある場合はお知らせください。変更します ;)

于 2013-02-18T10:41:32.257 に答える