【问题标题】:Windows Phone cancelling Async tasks when pressing back button按下后退按钮时 Windows Phone 取消异步任务
【发布时间】:2013-05-14 09:46:25
【问题描述】:

当我在我的应用程序中加载页面时,我会触发一系列 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。

【问题讨论】:

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


    【解决方案1】:

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

    可以使用CancelAsync方法取消异步操作 还没有完成。

    你试过了吗?

    您可以使用 HttpClient Class 并使用采用 CancellationTokenGetAsync Method 的重载之一,并使用它来取消所有挂起的操作。

    您可以通过HTTP Client Libraries NuGet package (Microsoft.Net.Http)上的Windows Phone 获取HttpClient Class

    【讨论】:

    • 您的回答也很有帮助,谢谢!不幸的是,我还没有足够的代表来投票。 ;)
    【解决方案2】:

    最近,我看了一些关于 CancellationToken 和 Progress Reporting 的不错的教程,但针对的是 Windows 8 应用程序。看看吧,here(第二个视频是用 CancellationToken 来停止异步工作),我想它可能会对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多