我正在閱讀Jeffrey Richter的一本書,CLR通過C#第4版。在本書中,作者討論了異步編程,並指出了GUI應用程序中的一個問題,例如WinForms或WPF應用程序,其中同步調用異步方法會導致GUI線程被阻塞。爲什麼WinForms應用程序中的此文本框會中斷?
我在Visual Studio 2015中創建了一個開箱即用的WinForms應用程序,並鍵入了本書中討論的方法。該代碼獲取一個任務,表單然後使用Result屬性來設置窗體上的文本框。我在下面的表格中包含了部分類定義。
問題是執行此操作後文本框變得破碎。破碎我的意思是不可能輸入到文本框。此外,在設置TextBox的Text屬性之後,TextBox實際上並不顯示文本。我不認爲問題在於Richter書中的代碼。畢竟在調試器中運行應用程序後,我實際上可以看到所請求的頁面的html爲字符串。
爲什麼TextBox會中斷?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.MaxLength = 0;
string page = GetHttp().Result;
textBox1.Text = page;
}
private Task<String> GetHttp()
{
return Task.Run(async() =>
{
// Issue the HTTP request and let the thread return from GetHttp
HttpResponseMessage msg = await new HttpClient().GetAsync("http://www.techspot.com");
return await msg.Content.ReadAsStringAsync();
});
}
}
RichTextBox顯示字符串很好,如果這很有用。 –
刪除'Task.Run'它是無用 – Fabio
MaxLength = 0,你期望什麼 – CSharpie