代码运行时,进度条(选取框)消失

时间:2013-12-24 00:17:48

标签: c#

我有一个简单的表单,带有一个按钮和一个进度条。用户单击按钮开始处理,进度条在代码运行时设置动画。在这种情况下,它只是一个for循环。但问题是进度条只出现了几分之一秒然后就消失了。

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.Style = ProgressBarStyle.Marquee;
    progressBar1.MarqueeAnimationSpeed = 100;

    for (int i = 0; i < 3; i++) { Thread.Sleep(1000); } // sleep 3 times for 1 second

}

我认为这是因为在代码继续后重绘帧?所以我尝试在另一个线程上运行for循环,但它似乎并不重要。

如何在循环运行时让条形图进行动画处理?

由于

1 个答案:

答案 0 :(得分:4)

您可以通过在循环的每次迭代中调用Application.DoEvents()来简单地解决此问题。

但这不是实现这一目标的最佳方法。

推荐的方法是在另一个线程中处理你的循环,比如BackgroundWorker,让你的进度条在主线程上保持动画。

您可以在此处获得一些解释:Keeping your UI Responsive and the Dangers of Application.DoEvents