当前位置:  开发笔记 > 编程语言 > 正文

使用async/await:await返回得太早

如何解决《使用async/await:await返回得太早》经验,为你挑选了1个好方法。

我有一个简单的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%左右的进展.

我究竟做错了什么?



1> Ivan Stoev..:

您遇到的问题与async/await您正确使用的问题无关.这await不是太早回来,只是进度条更新太晚了.换句话说,这是几个线程中描述的进度条控件特定问题 - 更改值时禁用.NET进度条动画?,禁用WinForms ProgressBar动画,在进度条达到100%之前触发RunWorkerCompleted等.您可以使用这些线程中提供的解决方法之一.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有