2013-05-11 70 views
3

當我在我的應用程序中加載頁面時,我發起了一系列WebClient.DownloadStringAsync請求。這些出去執行json API調用。我注意到,如果用戶在應用程序點擊我的WebClient_StringCompleted之前按下後退按鈕,任務仍然完成,我寧願不要。有沒有辦法使用OnBackKeyPress覆蓋來停止所有的異步任務?Windows Phone在按下按鈕時取消異步任務

更新:

我最終混合了以下兩個答案。這裏是我的代碼上解決:

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(); 

這將使用Web客戶端的CancelAsync()方法取消所有的WebClient的。

回答

1

最近,我已經關注了關於CancellationToken和Progress Reporting的一些不錯的教程,但是對於Windows 8應用程序。檢查出來,here(第二個視頻與CancellationToken停止異步工作),我認爲它可以幫助你。

+0

好吧,這樣的視頻最終是我採取的方法。 – 2013-05-14 01:37:12

2

據爲WebClient.DownloadStringAsync Method (Uri)的文檔:

可以使用CancelAsync方法取消異步操作 還沒有完成。

你試過了嗎?

您可以使用HttpClient Class並使用GetAsync Method中的一個重載,該重載需要CancellationToken並使用它來取消所有掛起的操作。

你可以得到HttpClient Class的Windows Phone上的HTTP Client Libraries NuGet package (Microsoft.Net.Http)

+0

您的回答非常有幫助,謝謝!不幸的是,我還沒有足夠的代表投票。 ;) – 2013-05-14 01:51:45

+0

我覺得你的窗格:D – 2013-05-14 06:42:54

相關問題