我使用以下代码执行SourceCreator
方法,而不阻塞UI。
string a =null;
private string SourceCreator()
{
string sum = textBox7.Text;
sum = sum.Replace(" ", "+");
string url = string.Format("https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20220824221043&SearchText={0}&spm=a2g0o.productlist.1000002.0", sum);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
// richTextBox2.Text += sr.ReadToEnd();
a = sr.ReadToEnd();
sr.Close();
return a;
}
这里是按钮单击事件
private async void Timer4_Tick(object sender, EventArgs e)
{
Task<string> task1 = new Task<string>(SourceCreator);
task1.Start();
string p = await task1;
textBox10.Text = p;
}
我运行了这段代码,但这仍然阻止了我的Windows窗体应用程序的UI。有人能告诉我为什么吗?
1条答案
按热度按时间vkc1a9a21#
这里实际上并没有使用任何
async
方法,只是将它传递给了一个Task
构造函数,这并不是你应该做的,而且可能无法与WinForms的SynchronizationContext
一起工作。HttpWebRequest
实际上已被弃用,您应该改用HttpClient
。它具有完整的异步方法。如果你想使用
StreamReader
,你可以这样做