[英]C# Thread not changing the text box values the second time
name1
, name2
, name3
是创建窗体时的所有下载的,他们只是必然要当你按下按钮在第一时间文本框。
_name1()
, _name2()
, _name3()
方法只是对象实例化,没有任何副作用_name2()
_name3()
,它们什么也不做)。
而且所有线程处理工作都只是起毛-您正在调用不执行任何操作的方法,然后中止线程(因此中止了始终不执行任何操作的操作)。 由于当前正在编写代码,因此即使在第一次执行时,这对执行也没有任何影响。
代码的简单同步修复将如下所示:
private void Button_Click(object sender, EventArgs e)
{
using (WebClient client = new WebClient())
{
textBox1.Text = client.DownloadString("<your URL here>");
textBox2.Text = client.DownloadString("<your URL here>");
textBox3.Text = client.DownloadString("<your URL here>");
}
}
看到您正在使用线程时,您的目标显然是无阻塞的异步执行。 保留操作顺序的同时,最简单的方法是使用async/await
:
private async void Button_Click(object sender, EventArgs e)
{
// Disabling the button ensures that it's not pressed
// again while the first request is still in flight.
materialRaisedButton1.Enabled = false;
try
{
using (WebClient client = new WebClient())
{
// Execute async downloads in parallel:
Task<string>[] parallelDownloads = new[] {
client.DownloadStringTaskAsync("<your URL here>"),
client.DownloadStringTaskAsync("<your URL here>"),
client.DownloadStringTaskAsync("<your URL here>")
};
// Collect results.
string[] results = await Task.WhenAll(parallelDownloads);
// Update all textboxes at the same time.
textBox1.Text = results[0];
textBox2.Text = results[1];
textBox3.Text = results[2];
}
}
finally
{
materialRaisedButton1.Enabled = true;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.