一段耗时的代码,执行的时候想通过ProgressBar显示进度,但是单纯修改ProgressBar.Value还是不能显示出来(窗口此时对消息不相应),请问如何解决?谢谢!

解决方案 »

  1.   

    我的做法是,做多线程,大量的业务处理放给工作线程, 工作线程阶段性工作完成返回一个标志量,用于修改主线程上的ProcessBar.Value我实验得不多,不过觉得这样做的效果是最好的,楼主可以借鉴
      

  2.   

    private void button4_Click(object sender, System.EventArgs e)
    {
    this.timer1.Enabled=true;

    } private void timer1_Tick(object sender, System.EventArgs e)
    {
    this.progressBar1.PerformStep();
    if(this.progressBar1.Value>=100)
    this.progressBar1.Value=0;
    }
      

  3.   

    不太严格的说,Application.DoEvents();或this.Update()可以保证显示的问题
      

  4.   

    Application.DoEvents()也试过了一下,感觉还是有些卡
      

  5.   

    实际上我也很少用DoEvents,而是经常用Update,我个人感觉,如果用了DoEvents,界面是活的,甚至可以移动窗口,Update可以解决窗口不绘制的问题,特别是动态绘制窗口(也就是说包含N多绘图函数的窗口),Update还是有一定的号召力的,至少能让N多控件自动完成其重绘功能,我之所以说至少,原因是我还没找到有什么子窗口不响应此操作.不过只Update是无法拖动正在执行任务的窗口的
      

  6.   

    progressBar已经自已解决了更新的相关问题,很多事不需要你担心,只要你使用得当,显示应该是没有问题的
      

  7.   

    http://www.codeproject.com/csharp/PIEBALDProgressDialog.asp