2013-08-02 111 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