2013-05-11 72 views
3

当我在我的应用程序中加载页面时,我发起了一系列WebClient.DownloadStringAsync请求。这些出去执行json API调用。我注意到,如果用户在应用程序点击我的WebClient_StringCompleted之前按下后退按钮,任务仍然完成,我宁愿不要。有没有办法使用OnBackKeyPress覆盖来停止所有的异步任务?Windows Phone在按下按钮时取消异步任务

更新:

我最终混合了以下两个答案。这里是我的代码上解决:

WebClient VideoDetails = new WebClient(); 
      id = parameter; 
      VideoDetails.DownloadStringCompleted += new DownloadStringCompletedEventHandler(VideoDetails_StringCompleted); 
      if (!cts.Token.IsCancellationRequested) 
      { 
       using (CancellationTokenRegistration ctr = cts.Token.Register(() => VideoDetails.CancelAsync())) 
       { 
        VideoDetails.DownloadStringAsync(new Uri("http://www.url.com/api/get_video_detail?id=" + VideoID)); 
       } 
      } 

CTS的类型CancellationTokenSource的类变量

然后我可以在我的OnBackKeyPress覆盖断火;

ct.Cancel(); 

这将使用Web客户端的CancelAsync()方法取消所有的WebClient的。

回答

1

最近,我已经关注了关于CancellationToken和Progress Reporting的一些不错的教程,但是对于Windows 8应用程序。检查出来,here(第二个视频与CancellationToken停止异步工作),我认为它可以帮助你。

+0

好吧,这样的视频最终是我采取的方法。 – 2013-05-14 01:37:12

2

据为WebClient.DownloadStringAsync Method (Uri)的文档:

可以使用CancelAsync方法取消异步操作 还没有完成。

你试过了吗?

您可以使用HttpClient Class并使用GetAsync Method中的一个重载,该重载需要CancellationToken并使用它来取消所有挂起的操作。

你可以得到HttpClient Class的Windows Phone上的HTTP Client Libraries NuGet package (Microsoft.Net.Http)

+0

您的回答非常有帮助,谢谢!不幸的是,我还没有足够的代表投票。 ;) – 2013-05-14 01:51:45

+0

我觉得你的窗格:D – 2013-05-14 06:42:54