我有一个WinForms应用程序有两种形式。在第一个表单上,用户输入一些信息并单击下一个按钮,这会隐藏form1,加载form2并触发一个任务(其功能在form1上),从数据库加载数据。
我想要做的是在第二个表单上有一个文本框,显示"正在加载数据"任务正在运行,然后在任务完成时返回行的计数。一直允许用户继续在form2上输入数据。
这是我第一次尝试使用任务async
而我正在努力想办法解决这个问题。
Task emailTask = new Task(() => FindCustomersForEmail(reg.Index));
emailTask.Start();
MessageControl formMessageControl = new MessageControl();
formMessageControl.Show();
this.Hide();
我脑子里的东西是这样的:
while (emailTask not complete)
{
txtEmailCount.Text = "Loading";
}
txtEmailCount.Text = customersToEmail.Rows.Count.ToString();
答案 0 :(得分:5)
为什么不只是await
上的Task
?
// Note this is void because I'm assuming it's an event handler.
// If it isn't this should be `async Task` instead.
public async void FindCustomersAsync()
{
txtEmailCount.Text = "Loading";
await Task.Run(() => FindCustomersForEmail(reg.Index));
txtEmailCount.Text = customersToEmail.Rows.Count.ToString();
}
附注 - 请使用Task.Run
而不是手动启动Task
。