我有一个简单的表单,带有一个按钮和一个进度条。用户单击按钮开始处理,进度条在代码运行时设置动画。在这种情况下,它只是一个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循环,但它似乎并不重要。
如何在循环运行时让条形图进行动画处理?
由于
答案 0 :(得分:4)
您可以通过在循环的每次迭代中调用Application.DoEvents()来简单地解决此问题。
但这不是实现这一目标的最佳方法。
推荐的方法是在另一个线程中处理你的循环,比如BackgroundWorker,让你的进度条在主线程上保持动画。
您可以在此处获得一些解释:Keeping your UI Responsive and the Dangers of Application.DoEvents