当我在我的应用中加载页面时,我会发出一系列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。
答案 0 :(得分:2)
根据WebClient.DownloadStringAsync Method (Uri)的文档:
您可以使用CancelAsync方法取消异步操作 尚未完成。
你试过吗?
您可以使用HttpClient Class并使用带有GetAsync Method的CancellationToken重叠之一,并使用它来取消所有待处理的操作。
您可以通过HttpClient Class
从 Windows Phone 获取HTTP Client Libraries NuGet package (Microsoft.Net.Http)答案 1 :(得分:1)
最近,我看过一些关于CancellationToken和Progress Reporting的好教程,但是对于Windows 8应用程序。看看,here(第二个视频是使用CancellationToken来停止异步工作),我认为它可能对你有帮助。