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哈哈~,终于解决这个问题。
该贴已经同步到 842986480的微博 |