【发布时间】:2017-02-08 23:59:47
【问题描述】:
我第一次尝试异步等待,但在使用 Progress 时遇到了问题。我使用 await 调用我的异步方法并传入我的进度操作。我想要发生的事情是显示进度,当方法完成时显示我们“完成!”的消息。被展示。发生的情况是显示进度,“完成!”显示,然后是最后一条进度消息,这是输出示例: 1、 2、
完成! 3
似乎异步已返回,并且 UI 上下文在最终 Progress 有机会运行之前执行。我可以通过添加处理程序来克服这个问题,但要正确地遵循模式。
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";
}
【问题讨论】: