簡體   English   中英

對.NET 4.5中的WPF中的異步事件處理程序沒有響應

[英]Unresponsiveness with async event handlers in WPF in .NET 4.5

我創建了一個簡單的異步操作,單擊按鈕時會觸發該操作。 這是整個代碼:

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;   
    }
}

WebClient使用HttpWebRequest ,遺憾的 ,即使您使用“異步”方法,也不是非常異步 它至少會阻止DNS查詢。 它也可能在代理協商和/或初始HTTP連接期間阻塞。

舊版本的HttpClient只是在HttpWebRequest周圍使用了一個包裝器。 請求了一個真正異步的HttpClient ,但從未聽過響應。 我最后一次檢查HttpClient ,它仍然是MVC的一部分; 那時ASP.NET Web API還沒有出現,所以從那以后他們可能已經修復了HttpClient 或者 ,您的計算機上的WebClientHttpClient之間的行為差​​異可能只與DNS緩存或其他類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM