J#/ C#更新/刷新GUI线程

时间:2011-12-04 12:40:58

标签: c# progress-bar refresh repaint j#

我有一个只填充进度条的功能。

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()也没有工作。

2 个答案:

答案 0 :(得分:1)

尝试使用

Application.DoEvents();

更新进度条后。

更多关于DoEvents here

答案 1 :(得分:1)

您当前的代码不会让主消息循环执行,因此它会阻止所有消息,包括WM_PAINT个消息......

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

不要使用Application.DoEvents这是不好的编程习惯,甚至不应该存在。