我现在有一个事件,里面处理的代码量执行时间比较长,现在假设有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都执行完了才显示“预测成功!”。达不到动态更新的效果啊。如果要开个线程又该怎么弄呢?高手赐教^_^谢谢!

解决方案 »

  1.   

    private void button3_Click(object sender, EventArgs e) 

      progressBar1.Value = 20; 
      label2.Text = "初始化..."; 
      Application.DoEvents();
      过5秒钟 
      progressBar1.Value = 50; 
      label2.Text = "预测分类..."; 
      Application.DoEvents();
      过5秒钟   progressBar1.Value = 100; 
      label2.Text = "预测成功!"; 
      Application.DoEvents();
      

  2.   


    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();

    强制刷新一下就行了。
      

  3.   

    加线程的话,最简单的方法是这样:private void button3_Click(object sender, EventArgs e)
    {
        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();
    }