0

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

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

提前致谢。

4

1 回答 1

0

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

如何在此处使用 BackgroundWorker 。

于 2013-03-09T12:27:55.467 回答