2013-08-02 86 views
7

是否可以取消HttpClient GET web request in Windows 8.我正在尋找一種解決方案來取消我的Web請求,如果用戶從頁面中按回鍵。在我的應用程序中,我使用static class來創建Web請求。如何取消HttpClient GET Web請求

我在應用程序內部使用MVVM Lightstatic viewmodels

在目前的情況下,即使用戶按下後退按鈕, vm仍然活着,回撥達到並執行​​。

所以我正在尋找一種解決方案,以取消後面的新聞請求。

+0

可以使用的CancellationToken取消異步方法。這是一種做法,可能是其他做法。 – VasileF

+0

您可以添加CancellationToken取消請求的方式作爲回答。然後我會將它標記爲答案 –

回答

5

試試這個

protected async override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    await HttpGetRequest(); 
} 

public CancellationTokenSource cts = new CancellationTokenSource(); 
private async Task HttpGetRequest() 
{ 
    try 
    { 
     DateTime now = DateTime.Now; 
     var httpClient = new HttpClient(); 
     var message = new HttpRequestMessage(HttpMethod.Get, "https://itunes.apple.com/us/rss/toppaidapplications/limit=400/genre=6000/json"); 
     var response = await httpClient.SendAsync(message, cts.Token); 
     System.Diagnostics.Debug.WriteLine("HTTP Get request completed. Time taken : " + (DateTime.Now - now).TotalSeconds + " seconds."); 
    } 
    catch (TaskCanceledException) 
    { 
     System.Diagnostics.Debug.WriteLine("HTTP Get request canceled."); 
    } 
} 

private void btnCancel_Click(object sender, RoutedEventArgs e) 
{ 
    cts.Cancel(); 
} 
+0

請注意,對於Windows 8.1運行時,事情「只是一點點」 - [在Windows 8.1中的http客戶端取消請求](http://stackoverflow.com/questions/23457797/http- client-cancel-request-in-windows-8-1),所以在Windows 8.0中,只有在運行時才能得到正確的答案。 – Sevenate

+0

OP也只要求W8。查看問題的標籤。 – Xyroid

+1

我已經看過標籤,對於Windows 8,您的回答是完全正確的。剛剛爲那些喜歡我的人添加了評論,可能會查看最新(迄今)Windows的類似信息,並將它們指向適當的位置。 – Sevenate