2014-03-06 78 views
1

我開發一個應用程序的Windows Phone和我有沒有人幫我...我 有一個按鈕,單擊時,顯示一個頁面的主體內容。異步任務的Windows Phone

搜索了很多關於如何下載的東西,而不是凍結德UI之後,我發現這個代碼,爲我工作得很好:

private async void btnBotao_Click(object sender, RoutedEventArgs e) 
     { 
      string returnedTaskTResult = await AccessTheWebAsync(); 

      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml(returnedTaskTResult); 
      var body = doc.DocumentNode.SelectSingleNode("//body").WriteContentTo(); 
      txb.Text = body; 
     } 

     public async Task<string> AccessTheWebAsync() 
     { 
      HttpClient client = new HttpClient(); 
      Task<string> getStringTask = client.GetStringAsync("PAGE"); 

      string urlContents = await getStringTask; 

      return urlContents; 
     } 

我只是想知道這是否是正確的做這樣...因爲我幾乎一無所知線程,即使這個工作對我來說,這也許不是更好的方式來做到這一點......也許這是不完整的......

非常感謝!也

 Task<string> getStringTask = client.GetStringAsync("PAGE"); 

     string urlContents = await getStringTask; 

     return urlContents; 

這樣的:

回答

1

看起來不錯 - 我想改變的僅僅是簡化的語法:

public async Task<string> AccessTheWebAsync() 
{ 
    HttpClient client = new HttpClient(); 
    return await client.GetStringAsync("PAGE"); 
} 

你甚至可以完全消除「AccessTheWeb」功能,因爲它適合在一個單一的行:

private async void btnBotao_Click(object sender, RoutedEventArgs e) 
{ 
    string returnedTaskTResult = await new HttpClient().GetStringAsync("PAGE"); 

    HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml(returnedTaskTResult); 
    var body = doc.DocumentNode.SelectSingleNode("//body").WriteContentTo(); 
    txb.Text = body; 
} 
+0

因此,是「等待」,「創建」另一個線程,並使用它下載頁面,使UI線程「免費」? 下載完成後,執行下列行嗎? 這是正確的嗎? –

+0

@ user2751628是的,正好 – McGarnagle

+0

哇!這比我想象的更容易...非常感謝! –

1

如果我不是完全地錯了,你可以寫更多

return await client.GetStringAsync("PAGE"); 

(只是有點向前伸直,更少的代碼,什麼對我來說是一個好東西)當涉及到邏輯部分時,如果使用await/async,框架將處理大部分內容。所以,我什麼也沒看到誰造成的問題