Windows Phone在按后退键时取消异步任务
本文关键字:取消 异步 任务 Phone Windows | 更新日期: 2023-09-27 18:13:09
当我在应用程序中加载一个页面时,我触发了一系列的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();
这将取消所有使用CancelAsync()方法的WebClient。
根据WebClient的文档。DownloadStringAsync方法(Uri):
你可以使用CancelAsync方法来取消异步操作
你试过吗?
你可以使用HttpClient类并使用GetAsync方法的重载之一,该方法接受一个CancellationToken并使用它来取消所有挂起的操作。
你可以得到HttpClient类从Windows Phone在HTTP客户端库NuGet包(Microsoft.Net.Http)
最近,我看过一些关于CancellationToken和进度报告的好教程,但对于Windows 8应用程序。查看一下,这里(第二个视频是与CancellationToken停止异步工作),我认为它可能会帮助你。