2013-02-18 261 views
0

我正在使用Web服務我沒有自己寫(所以不能編輯)。我有這樣的代碼:異步調用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()方法。

但是,如何使用這種方法並得到結果呢?有人能給我提供一個如何使用異步調用的簡單例子嗎?

感謝

回答

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行,動作代表一個委託或動作,你處理你的異步結果

讓我知道你是否有麻煩es翻譯成c#然後我會改變它;)

+0

謝謝。如果你可以把它翻譯成C#,那將會非常好,因爲我完全不理解這個代碼。 – Bv202 2013-02-18 10:42:45

+0

@ Bv202:想一想C#,可能會出現一點語法錯誤,但它應該是關閉的 – JMan 2013-02-18 10:48:58

+0

謝謝,我會測試它:) – Bv202 2013-02-18 10:49:52