2016-09-26 10 views
2

我有一个具有两种形式的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(); 

回答

5

为什么不只是awaitTask

// 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