842986480 发表于 2011-12-16 15:54:49

收藏一些文章

http://blog.sina.com.cn/s/blog_69e8fdf00100mdzz.html

)c#+AutoCAD,程序中如何设置进度条同步问题
关于AutoCAD中的进度条例子可以见:http://blog.sina.com.cn/s/blog_69e8fdf00100lw5l.html    在上面的例子提到:关于进度条的进度和程序进度如何保持一致,还有待研究
      通过几天的研究,初步有了解决方案如下,个人觉得还挺好的,只是貌似代码分散了点。原理如下:根据自己程序代码的进度来调整进度条的进度,就是把自己的代码分为多个阶段,大概分配下哪个阶段需要用百分之几的比例就可以了,下面用我这个程序中举个例子。如我前面的横断面标注程序。
      1.在标注前需要设置读取一下信息等等,我把这部分的时候安排了10%,而接下来就是循环标注了,然后就是结束了,所有我把后面的循环标注分配了90%的时间。
      2.时间分配好了,那就接下来在原代码中加入进度条代码,前面10%很好加,直接在设置读取信息的代码最后加入就行了,而90%的时间设置就稍微复杂一点,因为只分了90,那就只能在进度条进90范围内,所有这个时候就先要确定有多少个循环,由于程序中都是for循环,都已经通过前面的读取信息得到了循环的总次数,要保证进度条进90,那只需要把总循环次数/90.然后取整+1=i,然后在循环体内,看本次循环的次数是不是i的倍数,如果是i的倍数,就进度条进1, 这样就能保证所有循环结束时进度条进90范围内,差不多刚好程序结束时进度条也同时完成100%。
      3.方法上面讲过了,下面附上简短的代码
    using swf=System.Windows.Forms;
      ProgressMeter pm = new ProgressMeter();
      。。。。。。。。
      pm.Start("开始,请稍候...");
   pm.SetLimit(100);
    。。。。。。。。(这里为读取设置信息10%的时间,在下面运行进度条)
    for (int i = 0; i <= 10; i++)
    {
       System.Threading.Thread.Sleep(5);
       pm.MeterProgress();
       swf.Application.DoEvents();
   }
      。。。。。。。。
      int pmstart;
      pmstart = (int)plineId.Length / 90+1;
      for (int i = 0; i < plineId.Length; i++)
            {
            if (i % pmstart == 0)(循环次数为pmstart的整数倍时运行进度条进1)
                  {
                        System.Threading.Thread.Sleep(5);
                        pm.MeterProgress();
                        swf.Application.DoEvents();
                  }
      。。。。。。
            }
       for (int i = 10+plineId.Length/pmstart; i <= 100; i++)(把进度条进度到100)
                {
                  System.Threading.Thread.Sleep(5);
                  pm.MeterProgress();
                  swf.Application.DoEvents();
                }
      pm.Stop();(最后关了进度条)

      调试了下还是比较完美的,O(∩_∩)O哈哈~,终于解决这个问题。






http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 842986480的微博
页: [1]
查看完整版本: 收藏一些文章