按下后退按钮时Windows Phone取消异步任务

时间:2013-05-11 01:40:19

标签: c# windows-phone-7 async-await

当我在我的应用中加载页面时,我会发出一系列WebClient.DownloadStringAsync个请求。这些出去并执行json api调用。我注意到如果用户在应用程序到达WebClient_StringCompleted之前按下后退按钮,任务仍然完成,我宁愿不这样做。有没有办法使用OnBackKeyPress覆盖停止所有异步任务?

更新:

我最后混合了以下两个答案。这是我定居的代码:

 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();

这将使用WebClient中的CancelAsync()方法取消所有WebClient。

2 个答案:

答案 0 :(得分:2)

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

  

您可以使用CancelAsync方法取消异步操作   尚未完成。

你试过吗?

您可以使用HttpClient Class并使用带有GetAsync MethodCancellationToken重叠之一,并使用它来取消所有待处理的操作。

您可以通过HttpClient Class

Windows Phone 获取HTTP Client Libraries NuGet package (Microsoft.Net.Http)

答案 1 :(得分:1)

最近,我看过一些关于CancellationToken和Progress Reporting的好教程,但是对于Windows 8应用程序。看看,here(第二个视频是使用CancellationToken来停止异步工作),我认为它可能对你有帮助。