【问题标题】:J#/C# Update/Refresh GUI ThreadJ#/C# 更新/刷新 GUI 线程
【发布时间】:2011-12-04 12:40:58
【问题描述】:

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

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() 也不起作用。

【问题讨论】:

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


    【解决方案1】:

    尝试使用

    Application.DoEvents();
    

    更新进度条后。

    更多关于DoEventshere

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-27
        • 1970-01-01
        • 2011-04-25
        • 2015-11-17
        • 2013-07-12
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多