更新/刷新GUI线程

本文关键字:线程 GUI 刷新 更新 | 更新日期: 2023-09-27 18:16:42

我有一个简单地填充进度条的函数。

private void FillProgressBar(ProgressBar bar, Color c, int percent)
{
    int steps = 10;
    bar.set_Value(0);
    for (int i = 0; i < percent / steps; i++)
    {
        System.Threading.Thread.Sleep(100);
        bar.set_Value((i+1)*10) + bar.get_Value());
        this.Refresh();
    }
}

我从gui线程(不是多线程)调用它,它的目的是慢慢地填满栏。

但它似乎没有这样做,尽管值确实上升。

关于如何更新特定控件或整个表单有什么建议吗?PS:正如你所看到的,this.Refresh()也不起作用

更新/刷新GUI线程

尝试使用

Application.DoEvents();

更新进度条后。

DoEvents的更多信息

你当前的代码不让主消息循环执行,所以它会阻塞所有消息,包括WM_PAINT消息…

你不应该这样做,使用线程,使用计时器:不要阻塞UI。

不要使用Application.DoEvents,这是糟糕的编程实践,甚至不应该存在。