CAD—定义委托异步添加实体
生活随笔
收集整理的這篇文章主要介紹了
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—定义委托异步添加实体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: datagridview当传递具有已修改
- 下一篇: windows自动更新安装后遗留文件或文