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。

Windows Phone在按后退键时取消异步任务

根据WebClient的文档。DownloadStringAsync方法(Uri):

你可以使用CancelAsync方法来取消异步操作

你试过吗?

你可以使用HttpClient类并使用GetAsync方法的重载之一,该方法接受一个CancellationToken并使用它来取消所有挂起的操作。

你可以得到HttpClient类从Windows Phone在HTTP客户端库NuGet包(Microsoft.Net.Http)

最近,我看过一些关于CancellationToken和进度报告的好教程,但对于Windows 8应用程序。查看一下,这里(第二个视频是与CancellationToken停止异步工作),我认为它可能会帮助你。