任务完成时更改TextBox值

时间:2016-09-26 11:00:28

标签: c# .net winforms async-await task-parallel-library

我有一个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();

1 个答案:

答案 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