取消Windows Phone中的异步Web服务调用

时间:2013-03-08 20:41:18

标签: web-services silverlight asynchronous windows-phone

我正在开发一款使用.Net Web服务的Windows手机应用程序(由我开发)。当我调用Web服务方法时,异步执行并且不阻止UI。例如,这是一个代码示例,用于询问服务器列表o航班抵达。

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
      }
   }

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以在场景中使用BackgroundWorker。因此,当用户再次呼叫Web服务时,您可以取消将结束服务呼叫的后台工作进程。

如何使用BackgroundWorker here