Oli*_*ter 3 c# asynchronous winforms async-await progress-bar
我有一个简单的Windows窗体应用程序,只有一个按钮和一个进度条.
然后我有这个代码:
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()));
}
});
}
Run Code Online (Sandbox Code Playgroud)
该await ConvertFiles();收益太早,确定消息框似乎已经在80%左右的进展.
我究竟做错了什么?
您遇到的问题与async/await您正确使用的问题无关.这await不是太早回来,只是进度条更新太晚了.换句话说,这是几个线程中描述的进度条控件特定问题 - 更改值时禁用.NET进度条动画?,禁用WinForms ProgressBar动画,在进度条达到100%之前触发RunWorkerCompleted等.您可以使用这些线程中提供的解决方法之一.