【问题标题】:Changing TextBox Value when task completed任务完成时更改文本框值
【发布时间】:2017-02-03 16:39:42
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    为什么不把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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多