我第一次尝试异步等待并遇到使用进度的问题。我使用 await 调用我的异步方法并传入我的进度操作。我想要发生的是显示进度,当方法完成消息说我们“完成!” 被展示。发生的情况是显示进度,“完成!” 显示,然后是最后一条进度消息,这是输出示例:1、2、
完毕!3
似乎异步已返回,并且 UI 上下文在最终进度有机会运行之前执行。我可以通过添加处理程序来克服这个问题,但要正确地遵循模式。
public async void button1_Click(object sender, EventArgs e)
{
await JustDoItAsync(new Progress<int>(ProgressUpdate));
textBox1.Text += "\r\nDone!\r\n";
}
public async Task JustDoItAsync(IProgress<int> progress)
{
for (int i = 0; i < 3; i++)
{
await Task.Delay(500);
progress.Report(i + 1);
}
}
private void ProgressUpdate(int step)
{
textBox1.Text += step + "\r\n";
}