2013-03-08 71 views
0

我正在開發一個使用.Net Web服務(由我開發)的windows phone應用程序。當我調用Web服務方法時,請異步執行,不要阻止UI。例如,下面是一個代碼示例,用於向服務器詢問列表o到達航班的列表。取消windows phone中的異步web服務調用

service.MobileWSSoapClient Proxy { get; set; } 
Proxy = new service.MobileWSSoapClient(); 
Proxy.GetArrivalsCompleted += proxy_GetArrivalsCompleted; 
Proxy.GetArrivalsAsync(searchFilter); 

這樣,我給的自由,用戶再次調用相同的方法或另一個(例如:刷新到來列表或搜索特定到達)。如果用戶產生新的服務呼叫,應用程序應該「取消」第一個電話,並只顯示最後一次電話的結果。我認爲這在技術上是不可能的,取消已經到服務器的Web服務調用,我們應該等待服務器響應,然後忽略它。瞭解到這一點,將標記以某種方式標記爲過時會很有幫助。作爲該過時呼叫的響應,接收錯誤就足夠了。我會寫一個我想象/需要的僞代碼。

void proxy_GetArrivalsCompleted(object sender, service.GetArrivalsCompletedEventArgs e){ 

    if (e.Error == null){ 
     // DO WORK 
    } 
    else 
    { 
     if(e.Error == Server Exception || e.Error == Connection Exception){ 
     MessageBox.Show("error"); 
     } 
     else if (e.Error == obsolete call){ 
     // DO NOTHING 
     } 
    } 

在此先感謝。

回答

0

您可以使用BackgroundWorker作爲您的場景。因此,當用戶再次調用Web服務時,您可以取消將終止服務調用的BackgroundWorker進程。

如何使用BackgroundWorker here

+0

當我從BackgroundWorker調用Web服務器時,它只是調用它並結束它的工作。意味着它不會等到服務器響應。 – nachoifa 2013-03-18 21:35:09