CAD—定义委托异步添加实体
先简单的介绍下同步和异步委托:
(1)同步委托:委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。
(2)异步委托:异步调用不阻塞主线程,而是把调用在线程池中的新线程中执行,我们可以不必关心,也无需关心这个“新线程”是怎么定义的
委托的异步调用通过BeginInvoke和EndInvoke来实现。
直接上代码看的直观.
2 Document doc = AsApp.DocumentManager.MdiActiveDocument;
3 Editor ed = AsApp.DocumentManager.MdiActiveDocument.Editor;
4 Database db = AsApp.DocumentManager.MdiActiveDocument.Database;
5 [CommandMethod("AddCircle")]
6 public void AddCircle()
7 {
8 //定义
9 Point3d center = Point3d.Origin;
10 AddCircleHandler circle = new AddCircleHandler(AddCircle);
11
12 //操作
13 Transaction tr = db.TransactionManager.StartTransaction();
14 using (tr)
15 {
16 PromptPointOptions opt = new PromptPointOptions("选择圆的中点");
17 PromptPointResult res = ed.GetPoint(opt);
18 if (PromptStatus.OK != res.Status)
19 {
20 return;
21 }
22 center = res.Value;
23
24 //Commit
25 tr.Commit();
26 }
27
28 ed.WriteMessage("\n异步调用前");
29 IAsyncResult myResult = circle.BeginInvoke(center, 300, null, null);//异步添加圆
30
31 while (!myResult.IsCompleted)
32 {
33 ed.WriteMessage("\n异步添加圆正在执行。。。。!");
34 }
35 ed.WriteMessage("\n异步调用后");
36 }
37
38 /// <summary>
39 /// 添加实体
40 /// </summary>
41 private void AddCircle(Point3d center, double radius)
42 {
43 //操作
44 Transaction tr = db.TransactionManager.StartTransaction();
45 using (tr)
46 {
47 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
48 BlockTableRecord btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead) as BlockTableRecord;
49
50 //Add Circle
51 using (DocumentLock docLock = doc.LockDocument())
52 {
53 Circle circle = new Circle(center, new Vector3d(0, 0, 1), radius);
54 btr.UpgradeOpen();
55 btr.AppendEntity(circle);
56 tr.AddNewlyCreatedDBObject(circle, true);
57
58 //Commit
59 tr.Commit();
60 }
61 }
62 }
转载于:https://www.cnblogs.com/wangyong/archive/2010/03/08/1680663.html
CAD—定义委托异步添加实体相关推荐
- cad二次开发-C#-VS-镜像-判断用户当前是否已选择实体-将实体对象添加到模型空间-添加实体到块表记录-将块定义插入到模型空间
创建新图层 public static void CreateLayer(string LayerName){Document acDoc = Application.DocumentManager. ...
- (二)线程--通过委托异步调用方法
(一).描述 先运行个简单的线程示例,认识一下线程 通过委托调用方法,以及使用AsyncResult判断线程的状态 (二).代码 using System; using System.Thre ...
- 怎么在CAD三维图面上添加一长段说明文字?
CAD设计图纸也能进行三维设计,作为一个图纸中的立体图形设计,我们想要在某一个面上添加一段文字说明的话,又该怎么进行设置?现在开始为大家演示一下教程,怎么在CAD三维图面上添加一长段说明文字.不管是做 ...
- 【经典】Spring aop切面实现异步添加日志—完整版
系统开发中我们常遇到要处理系统日志等信息的,在此我分享一篇 利用spring aop切面来异步添加日志的操作,其中用到了 队列和多线程,前面的博客有写. 第一步:创建log实体,根据自己业务而定, p ...
- Microsoft Visual Studio 2012 添加实体数据模型
Microsoft Visual Studio 2012 添加实体数据模型 1.创建一个web项目 2.添加ADO实体数据模型,如下图: 3.选择 从数据库生成,然后下一步 4.新建连接,如下图: ...
- 17委托异步调用方法
抽象出一个炒菜的类. 1: //炒菜 2: public class Cooking 3: { 4: public string Cook(string food1, string food2) 5: ...
- Asp.net 关于错误提示 类型“XXX1”在未被引用的程序集中定义,必须添加对程序集XXX2的引用...
在我们使用asp.net进行开发的时候,可能有的时候会遇到这样的错误提示 "类型"XXX1"在未被引用的程序集中定义.必须添加对程序集XXX2的引用" 对于这个 ...
- Asp.net 关于错误提示 类型“XXX1”在未被引用的程序集中定义,必须添加对程序集XXX2的引用...
在我们使用asp.net进行开发的时候,可能有的时候会遇到这样的错误提示 "类型"XXX1"在未被引用的程序集中定义.必须添加对程序集XXX2的引用" 对于这个 ...
- CAD中如何创建复合实体?CAD创建复合实体步骤
在CAD设计过程中,如果想要创建复合实体的话该如何操作呢?哪个CAD命令可以快速创建复合实体?本节CAD三维制图教程小编就来给大家分享一下浩辰CAD软件中创建复合实体的几个常用CAD命令,一起来看看吧 ...
最新文章
- 双摄就能拍银河拍月亮,还有皮卡丘教你手势识别,这是Pixel 4和谷歌的一箩筐新硬件...
- linux 删除20日前数据,Linux 维护常用命令
- 数字类型的不正确转换漏洞
- 神奇!C语言还可以这样用来仿真
- 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
- python 3.6.5 模拟银行转账系统
- python 按位运算符_Python按位运算符
- 【气动学】基于matlab GUI外弹道仿真系统【含Matlab源码 1044期】
- JZOJ6734. 【2020.06.18省选模拟】航行
- Python数据挖掘进阶--泰坦尼克号案例分析
- 免费抠人像、抠图网站
- 提高DevExpress winform 控件加载速度
- php流量统计代码_用php编写的简单的网站流量统计程序
- 当前话题管理故事:厨师绑湖蟹 (转载)
- [Linux 基础] -- Linux input 子系统要点总结
- Tryhackme blue
- Mr.Xiong使用jQuery实现一到一百随机数和事件的委派的效果
- 红米K50电竞版上手体验
- ERROR: NMO not setuid-root (Unix-only)
- java实现排他平方数
热门文章
- 计算是计算机科学独有的方法,大学计算机基础教学中的计算思维培养.doc
- C语言程序设计 计算个人所得税 浙大版,《C语言及程序设计》实践参考——个人所得税计算器switch语句版...
- 003_onreadystatechange事件
- 009-SDK框架之LYWSDKPlatform.h
- html自动轮播中间放大,html5+css如何实现中间大两头小的轮播效果
- linux 查看语言环境_Linux语言环境版本查看shell脚本
- 即时通讯:XMPP基础
- Java基础:基本数据类型包装类
- mysql 的select语句_MYSQL SELECT语句新手
- php屏幕抓取,关于屏幕抓取:如何在PHP中实现Web scraper?