我有一个简单的Windows Forms应用程序,上面只有一个按钮和一个进度条。
然后我有以下代码:
private async void buttonStart_Click(object sender, EventArgs e)
{
progressBar.Minimum = 0;
progressBar.Maximum = 5;
progressBar.Step = 1;
progressBar.Value = 0;
await ConvertFiles();
MessageBox.Show("ok");
}
private async Task ConvertFiles()
{
await Task.Run(() =>
{
for (int i = 1; i <= 5; i++)
{
System.Threading.Thread.Sleep(1000);
Invoke(new Action(() => progressBar.PerformStep()));
}
});
}
await ConvertFiles();
返回得太早了,当进度条显示约80%时就已经弹出“确定”对话框了。我做错了什么?
await Task.Delay
替换你的 Sleep。 - spenderprogressBar.Value = i
。可能是ProgressBar
的实现在更新 UI 时存在一些延迟吗?我检查了源代码,它使用的是同步的SendMessage
方法... 这是一个非常有趣的问题。 - René Vogt