第一次在这里向我提问。
我将尝试使用此代码段解释我的问题:
progressBar1.Maximum = 50;
for (int i = 0; i < 50; i++)
{
progressBar1.Value++;
}
MessageBox.Show("Finished");
progressBar1.Value = 0;
此代码的问题在于,当for循环结束时,MessageBox会弹出,当进度条完成绘制时,不是。有没有办法等到进度条完成绘图才能继续?
谢谢你们!
答案 0 :(得分:3)
您可能需要查看System.Windows.Forms.Application.DoEvents()
。 Reference
progressBar1.Maximum = 50;
for (int i = 0; i < 50; i++)
{
progressBar1.Value++;
Application.DoEvents();
}
MessageBox.Show("Finished");
progressBar1.Value = 0;
答案 1 :(得分:1)
这里的问题是您正在UI线程上完成所有工作。为了重新绘制UI,通常需要抽取窗口消息。修复此问题的最简单方法是告诉进度条更新。调用Control.Update将强制同步完成任何待处理的绘图。
progressBar1.Maximum = 50;
for (int i = 0; i < 50; i++)
{
progressBar1.Value++;
progressBar1.Update();
}
MessageBox.Show("Finished");
progressBar1.Value = 0;
可能有效的其他方法是使用后台线程(使用所有额外的Control.Invoke调用来同步回UI线程)。 DoEvents(如前所述)也应该有效 - DoEvents将允许您的窗口再次处理消息,这段时间可能允许您绘制消息。但是,它会抽取消息队列中的所有消息,因此可能会导致不必要的副作用。
答案 2 :(得分:0)
尝试以下代码
progressBar1.Maximum = 50;
for (int i = 0; i < 50; i++)
{
this.SuspendLayout();
progressBar1.Value++;
this.ResumeLayout();
}
MessageBox.Show("Finished");
progressBar1.Value = 0;