C# Windows Phone在按“后退”按钮时取消异步任务

C# Windows Phone在按“后退”按钮时取消异步任务,c#,windows-phone-7,async-await,C#,Windows Phone 7,Async Await,当我在应用程序中加载页面时,我会发出一系列WebClient.DownloadStringAsync请求。它们将执行json api调用。我注意到,如果用户在应用程序点击我的WebClient\u StringCompleted之前按下后退按钮,任务仍然完成,我希望它不要这样做。是否有方法使用OnBackKeyPress覆盖停止所有异步任务 更新: 我最后混合了下面两个答案。这是我确定的代码: WebClient VideoDetails = new WebClient();

当我在应用程序中加载页面时,我会发出一系列
WebClient.DownloadStringAsync
请求。它们将执行json api调用。我注意到,如果用户在应用程序点击我的
WebClient\u 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。

最近,我看了一些关于CancelationToken和进度报告的不错的教程,但适用于Windows 8应用程序。请查看,(第二个视频带有CancellationToken以停止异步工作),我认为它可能会对您有所帮助。

根据以下文档:

您可以使用该方法取消异步操作 还没有完成的

你试过了吗

您可以使用和的重载之一,该重载接受并使用它取消所有挂起的操作


您可以从

上的Windows Phone获取您的答案,您的答案也帮了大忙,谢谢!不幸的是,我还没有足够的代表投票