admin管理员组文章数量:1516870
CAD进度条设置3种方法
一、ProgressMeter类
通过使用Autodesk.AutoCAD.Runtime命名空间中的ProgressMeter来显示,需要添加对acdbdmgd.dll、acmgd.dll、DotNetARX.dll的引用,并将“复制本地”属性改为False.
//设置进度条对象
Autodesk.AutoCAD.Runtime.ProgressMeter pm = new Autodesk.AutoCAD.Runtime.ProgressMeter();
//设置进度条最大数目
pm.SetLimit(totalCount);
//进度条开始工作,并显示提示文字
pm.Start(chkName);
//干活
pm.MeterProgress();
System.Windows.Forms.Application.DoEvents();
//干活
System.Windows.Forms.Application.DoEvents();
//进度条停止
pm.Stop();
但是这种方法会有明显的卡顿现象,而且需要使用DoEvents来刷新进度条,DoEvent非常影响效率,即便每隔5000次再调用1次DoEvents都不行,进度条每隔6%刷新1次,非常卡;
if (curCount == totalCount || curCount % 5000 == 0){System.Windows.Forms.Application.DoEvents();}
二、Utils类
Autodesk.AutoCAD.Internal命名空间中的Utils类提供了一种创建进度条的方法:
SetApplicationStatusBarProgressMeter(string log , int minimun, int maximum)
其中log为进度条提示信息,minimum为进度条最小位置,maximum为进度条最大位置。
//创建消息过滤类MessageFilter filter=new MessageFilter();//为程序添加消息过滤System.Windows.Forms.Application.AddMessageFilter(filter);bool esc=false;//标识是否按下了Esc键using (Transaction trans=db.TransactionManager.StartTransaction()){// 干活//进度条开始工作并设置进度条前要显示的提示文字Utils.SetApplicationStatusBarProgressMeter("开始进行检查", 0, points.Count);//设置进度Utils.SetApplicationStatusBarProgressMeter(i); //如果用户按下了Esc键,则结束遍历if (filter.KeyName == Keys.Escape){esc = true;break;}//让AutoCAD在长时间任务处理时仍然能接收消息System.Windows.Forms.Application.DoEvents();Utils.RestoreApplicationStatusBar();//恢复状态栏if (esc) trans.Abort();//如果按下了Esc键,则放弃所有的更改else trans.Commit(); //否则程序能完成所有点的变色工作,提交事务处理}//移除对按键消息的过滤System.Windows.Forms.Application.RemoveMessageFilter(filter);
三、ProgressManager类
使用上面 两个命令,当数据量非常大时,会出现非常明现的闪烁现象,可以使用DotNetARX基本类来解决这个问题。
ProgressManager manager = new ProgressManager(chkName);
manager.SetTotalOperations(totalCount);
//干活
manager.Tick();
//干活
manager.Dispose();
使用manager**非常平滑**,不卡顿。深得我心。
本文标签: CAD进度条设置3种方法
版权声明:本文标题:CAD进度条设置3种方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1706735953a701482.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论