有一个窗体A,上面有一个按钮 mybutton1 点击后会执行一段要运行要很长时间的函数“fun()”。
我想给它加上进度条。
思路是这样的。在fun()函数前打开B窗体上面放一个进度条。(专门用于放进度条,没有边框的)。等执行完fun()后,关闭B窗体。
步骤:
新建了一个窗体B。上面放了一个进度条控件"mypro"。
在load_B事件中写下如代码(代码大小写有错,这个忽略,我主要是写出我的思路)
  
form  B 的代码:
load_B(object sender, EventArgs e)

    B.maximun=10000000;
    while(1==1)
    {
       for(i<0;i<10000000;i++)
       {
         if(i%100==0)
           {
             mypro.value=i;
           }
        }
     }

------------------------------
form Abutton1_click(object sender, EventArgs e)
{   B b=new B();
   b.show();//打开进度条窗体,问题出现了,这时进度条走的效果很差,跟本看不到渐增的效果。
   fun()
   {
    ………………;
   }
   
}
---------------------------------
要求:给出代码,希望窗体B的进度条走的很清晰。(一格一格的走,不要看都看不见就满了,或fun()执行完了进度条才走。要边一边执行fun(),进度条一边一格一格地走。)另外,我也试了用多线程异步调用(可能我的水平太差,不正确吧)。总之就是看不到窗体B进度条“mypro”一格一格走的样子。搞了一天,我要疯了。

解决方案 »

  1.   

    学习!以前网上不是有个隐藏的代码哦!用time空间试试
      

  2.   

    楼主可以使用BackgroundWorker来实现,
    BackgroundWorker类包含3个事件,在事件处理程序中可进行异步操作辅助代码编写和同用户界面信息交互。publiceventDoWorkEventHandler DoWork;//异步处理代码
    publiceventProgressChangedEventHandler ProgressChanged;//处理进度汇报,同UI交互
    publiceventRunWorkerCompletedEventHandler RunWorkerCompleted;//结束处理通知 
    下面是我使用BackgroundWorker组件的一个demo界面, 
    这里包含了完整的代码和分析,楼主可以参考后应该不会再有疑问,
    http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx 
      

  3.   

    每次增加进度后使用Application.DoEvents()