0

我正在使用我自己没有编写的网络服务(因此无法编辑)。我有这个代码:

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 回答