首页 > 解决方案 > Windows 窗体在进度条处冻结?

问题描述

好的,所以我已经构建了我的表单应用程序,它有一个循环,使进度条上升,但这里的问题是,当它上升时,窗口没有移动或响应,我仍然可以看到进度酒吧更改,除非完成,否则我无法关闭它或任何东西。这有点烦人,因为我不希望它在测试时冻结,或者在进度条完成之前有一个不工作的应用程序。这是我的代码:

private void Form1_Load(object sender, EventArgs e)
    {
        progressBar2.Minimum = 1;
        progressBar2.Maximum = nummax;
    }

private void timer2_Tick(object sender, EventArgs e)
{
    for (int i = 1; i <= nummax; i++)
    {
        if (i != nummax && !enabled)
        {
            int percent;
            percent = i / nummax;
            string ab = percent.ToString();
            progress.Text = ab;
            Thread.Sleep(50);
            progressBar2.Value = i;
        }
    }
    if (progressBar2.Value == nummax || enabled || progressBar2.Value >= nummax - 30)
    {
        progress.Text = "Completed!";
        progressBar2.Minimum = 1;
        progressBar2.Maximum = 2;
        enabled = true;
    }
}

标签: c#winforms

解决方案


删除那个Thread.Sleep(50)

添加progressBar2.Refresh()

或未能使用

progressBar2.PerformStep()

系统正忙于处理,它没有时间将 Windows 消息刷新到控件。


推荐阅读