gpt4 book ai didi

c# - 使用异步/等待 : await returns too early

转载 作者:行者123 更新时间:2023-11-30 14:26:43 25 4
gpt4 key购买 nike

我有一个简单的 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()));
}
});
}

await ConvertFiles(); 返回太早,在大约 80% 的进度时已经出现 ok 消息框。

我做错了什么?

最佳答案

您遇到的问题与您正确使用的 async/await 无关。 await 并没有返回得太早,只是进度条更新得太晚了。换句话说,这是几个线程中描述的进度条控件特定问题 - Disabling .NET progressbar animation when changing value? , Disable WinForms ProgressBar animation , The RunWorkerCompleted is triggered before the progressbar reaches 100%等。您可以使用这些线程中提供的解决方法之一。

关于c# - 使用异步/等待 : await returns too early,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34659485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com