如果你创建了模态窗口,虽然一些API,例如Editor.GetSelection(),可以自动隐藏模式对话框,但如果从模态窗口出发与编辑器(编辑器指的模型空间,即你绘图的窗口)交互,
它会在GetSelection()完成后立即显示对话框,而你的其它代码可能仍在进行中,两者处于异步模式。
由于模式对话框很可能在其它代码完成之前显示,因此 AutoCAD UI 更新会被模态对话框阻止,可能产生一些问题,
比如你GetSelection()完成后还要从控制台输出一些信息,但是因为窗口显示出来了,那些信息可能输出到一半就暂停了,因为编辑器区域不刷新了。
所以在某些情况下可以选择先调用Editor.StartUserInteraction() 函数,手动隐藏窗口,它会在using结束之时才让窗口显示出来。
1 private void button_Click(object sender, EventArgs e) 2 { 3 Document doc = AcAp.DocumentManager.MdiActiveDocument; 4 Editor ed = doc.Editor; 5 using (ed.StartUserInteraction(this)) 6 { 7 PromptSelectionOptions ops = new PromptSelectionOptions { SingleOnly = true }; 8 var selectionResult = doc.Editor.GetSelection(ops); 9 if (selectionResult.Status == PromptStatus.OK) 10 { 11 ed.WriteMessage("do something..."); 12 ed.WriteMessage("do something..."); 13 } 14 } 15 }
在这个示例代码中,GetSelection()选择完成后,窗口仍然处于隐藏状态,直到第14行括号执行结束,窗口才会显示。
如果不使用StartUserInteraction() 函数,那么GetSelection()选择完成时,窗口会立即出现,if中的代码如果还在继续和编辑器交互,就可能被卡住,编辑器停止刷新,不会在编辑器中体现出来。
注意,在CAD2014中测试,StartUserInteraction()函数无效,在CAD2020中测试该函数有效,所以可能低版本对这个函数的支持有BUG,应该至少选择比2014更高的版本。
标签:模态,AutoCAD,对话框,GetSelection,编辑器,Editor,二次开发,窗口 From: https://www.cnblogs.com/TheRedHouse/p/17867471.html