先简单的介绍下同步和异步委托:

(1)同步委托:委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。

(2)异步委托:异步调用不阻塞主线程,而是把调用在线程池中的新线程中执行,我们可以不必关心,也无需关心这个“新线程”是怎么定义的
   委托的异步调用通过BeginInvoke和EndInvoke来实现。
        直接上代码看的直观.

代码

 1         public delegate void AddCircleHandler(Point3d center,double radius);//定义委托
 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—定义委托异步添加实体相关推荐

  1. cad二次开发-C#-VS-镜像-判断用户当前是否已选择实体-将实体对象添加到模型空间-添加实体到块表记录-将块定义插入到模型空间

    创建新图层 public static void CreateLayer(string LayerName){Document acDoc = Application.DocumentManager. ...

  2. (二)线程--通过委托异步调用方法

    (一).描述   先运行个简单的线程示例,认识一下线程   通过委托调用方法,以及使用AsyncResult判断线程的状态 (二).代码 using System; using System.Thre ...

  3. 怎么在CAD三维图面上添加一长段说明文字?

    CAD设计图纸也能进行三维设计,作为一个图纸中的立体图形设计,我们想要在某一个面上添加一段文字说明的话,又该怎么进行设置?现在开始为大家演示一下教程,怎么在CAD三维图面上添加一长段说明文字.不管是做 ...

  4. 【经典】Spring aop切面实现异步添加日志—完整版

    系统开发中我们常遇到要处理系统日志等信息的,在此我分享一篇 利用spring aop切面来异步添加日志的操作,其中用到了 队列和多线程,前面的博客有写. 第一步:创建log实体,根据自己业务而定, p ...

  5. Microsoft Visual Studio 2012 添加实体数据模型

     Microsoft Visual Studio 2012 添加实体数据模型 1.创建一个web项目 2.添加ADO实体数据模型,如下图: 3.选择 从数据库生成,然后下一步 4.新建连接,如下图: ...

  6. 17委托异步调用方法

    抽象出一个炒菜的类. 1: //炒菜 2: public class Cooking 3: { 4: public string Cook(string food1, string food2) 5: ...

  7. Asp.net 关于错误提示 类型“XXX1”在未被引用的程序集中定义,必须添加对程序集XXX2的引用...

    在我们使用asp.net进行开发的时候,可能有的时候会遇到这样的错误提示 "类型"XXX1"在未被引用的程序集中定义.必须添加对程序集XXX2的引用" 对于这个 ...

  8. Asp.net 关于错误提示 类型“XXX1”在未被引用的程序集中定义,必须添加对程序集XXX2的引用...

    在我们使用asp.net进行开发的时候,可能有的时候会遇到这样的错误提示 "类型"XXX1"在未被引用的程序集中定义.必须添加对程序集XXX2的引用" 对于这个 ...

  9. CAD中如何创建复合实体?CAD创建复合实体步骤

    在CAD设计过程中,如果想要创建复合实体的话该如何操作呢?哪个CAD命令可以快速创建复合实体?本节CAD三维制图教程小编就来给大家分享一下浩辰CAD软件中创建复合实体的几个常用CAD命令,一起来看看吧 ...

最新文章

  1. 双摄就能拍银河拍月亮,还有皮卡丘教你手势识别,这是Pixel 4和谷歌的一箩筐新硬件...
  2. linux 删除20日前数据,Linux 维护常用命令
  3. 数字类型的不正确转换漏洞
  4. 神奇!C语言还可以这样用来仿真
  5. 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
  6. python 3.6.5 模拟银行转账系统
  7. python 按位运算符_Python按位运算符
  8. 【气动学】基于matlab GUI外弹道仿真系统【含Matlab源码 1044期】
  9. JZOJ6734. 【2020.06.18省选模拟】航行
  10. Python数据挖掘进阶--泰坦尼克号案例分析
  11. 免费抠人像、抠图网站
  12. 提高DevExpress winform 控件加载速度
  13. php流量统计代码_用php编写的简单的网站流量统计程序
  14. 当前话题管理故事:厨师绑湖蟹 (转载)
  15. [Linux 基础] -- Linux input 子系统要点总结
  16. Tryhackme blue
  17. Mr.Xiong使用jQuery实现一到一百随机数和事件的委派的效果
  18. 红米K50电竞版上手体验
  19. ERROR: NMO not setuid-root (Unix-only)
  20. java实现排他平方数

热门文章

  1. 计算是计算机科学独有的方法,大学计算机基础教学中的计算思维培养.doc
  2. C语言程序设计 计算个人所得税 浙大版,《C语言及程序设计》实践参考——个人所得税计算器switch语句版...
  3. 003_onreadystatechange事件
  4. 009-SDK框架之LYWSDKPlatform.h
  5. html自动轮播中间放大,html5+css如何实现中间大两头小的轮播效果
  6. linux 查看语言环境_Linux语言环境版本查看shell脚本
  7. 即时通讯:XMPP基础
  8. Java基础:基本数据类型包装类
  9. mysql 的select语句_MYSQL SELECT语句新手
  10. php屏幕抓取,关于屏幕抓取:如何在PHP中实现Web scraper?