2014-03-06 25 views
0

這是一個簡單的功能,可以從網站中檢索html內容。所以人們可以從中提取數據。 我只發現窗口8有http web服務來獲取html。並且只有這種方式。如果任何人有更好的方式,請分享。窗口8檢索HTML內容

protected override void OnNavigatedTo(NavigationEventArgs e) 
      { 

       gethtml("URL"); 
      } 

      public async void gethtml(string URL) 
      { 
       HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL); 
       WebResponse myResponse = await myRequest.GetResponseAsync(); 
       StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8); 
       mainTxtBox.Text = sr.ReadToEnd(); 
      } 

由於窗口8只有httpwebrequest只有「GetResponseAsync」我必須使用await。並且只能在異步功能中使用。異步函數僅返回任務<>或無效。之後從任務<>更改爲其他格式是如此混亂和混亂。所以我讓它返回無效並將數據傳輸到其他全局源。 我沒有找到任何簡單的解釋如何從任務獲取字符串。所以我用這種方式。

回答

1

您的gethtml應返回Task而不是void。只有異步事件處理程序可以安全地返回void

protected async override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    await gethtml("URL"); 
} 

public async Task gethtml(string URL) 
{ 
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL); 
    WebResponse myResponse = await myRequest.GetResponseAsync(); 
    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8); 
    mainTxtBox.Text = sr.ReadToEnd(); 
} 

不過,我會把它是這樣的:

protected async override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    mainTxtBox.Text = await gethtml("URL"); 
} 

public async Task<string> gethtml(string URL) 
{ 
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL); 
    WebResponse myResponse = await myRequest.GetResponseAsync(); 
    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8); 
    return sr.ReadToEnd(); 
} 
+0

+1對於 「但是」 的一部分。應該只在UI線程中更改UI –