ボタンをクリックするとキックされる単純な非同期操作を作成しました。コード全体は次のとおりです。
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private async void Button_Click_1(object sender, RoutedEventArgs e) {
var htmlString = await DowloadPage("http://example.com");
txtBlock1.Text = htmlString;
}
public async Task<string> DowloadPage(string uri) {
using (WebClient client = new WebClient()) {
var htmlString = await client.DownloadStringTaskAsync(uri);
return htmlString;
}
}
}
非常に簡単。しかし、ボタンをクリックすると、UI スレッドが応答しなくなります。ページのダウンロード中にウィンドウ内を移動しようとすると、移動できません。
何がうまくいかないのですか?
編集:
.NET 4.5 で HttpClient を試してみたところ、期待どおりにうまくいきました。
public async Task<string> DowloadPage(string uri) {
using (HttpClient client = new HttpClient()) {
var response = await client.GetAsync(uri);
var htmlString = await response.Content.ReadAsStringAsync();
return htmlString;
}
}