我现在有一个事件,里面处理的代码量执行时间比较长,现在假设有private void button3_Click(object sender, EventArgs e)
{
progressBar1.Value = 20;
label2.Text = "初始化..."; 过5秒钟
progressBar1.Value = 50;
label2.Text = "预测分类..."; 过5秒钟 progressBar1.Value = 100;
label2.Text = "预测成功!";}
现在我的问题来了,progressBar倒是实时地更新了它的值,但是label2一开始都是空白,只有button3_Click都执行完了才显示“预测成功!”。达不到动态更新的效果啊。如果要开个线程又该怎么弄呢?高手赐教^_^谢谢!
{
progressBar1.Value = 20;
label2.Text = "初始化..."; 过5秒钟
progressBar1.Value = 50;
label2.Text = "预测分类..."; 过5秒钟 progressBar1.Value = 100;
label2.Text = "预测成功!";}
现在我的问题来了,progressBar倒是实时地更新了它的值,但是label2一开始都是空白,只有button3_Click都执行完了才显示“预测成功!”。达不到动态更新的效果啊。如果要开个线程又该怎么弄呢?高手赐教^_^谢谢!
{
progressBar1.Value = 20;
label2.Text = "初始化...";
Application.DoEvents();
过5秒钟
progressBar1.Value = 50;
label2.Text = "预测分类...";
Application.DoEvents();
过5秒钟 progressBar1.Value = 100;
label2.Text = "预测成功!";
Application.DoEvents();
}
private void button3_Click(object sender, EventArgs e)
{
progressBar1.Value = 20;
label2.Text = "初始化...";
label2.Refresh(); 过5秒钟
progressBar1.Value = 50;
label2.Text = "预测分类...";
label2.Refresh();
过5秒钟 progressBar1.Value = 100;
label2.Text = "预测成功!";
label2.Refresh();
}
强制刷新一下就行了。
{
Control.CheckForIllegalCrossThreadCalls = false;
System.Threading.Thread thread = new System.Threading.Thread(delegate()
{
progressBar1.Value = 20;
label2.Text = "初始化..."; System.Threading.Thread.Sleep(5000);
progressBar1.Value = 50;
label2.Text = "预测分类..."; System.Threading.Thread.Sleep(5000); progressBar1.Value = 100;
label2.Text = "预测成功!";
});
thread.IsBackground = true;
thread.Start();
}