修改要点说明(模仿参考程序方案A)TreeView_MouseDoubleClick:不再直接调用OnStartDrawElement,仅标记待绘制对象,设置挂起标记,直接退出双击消息,结束当前Windows消息栈。使用Application.Idle事件作为延迟触发入口(不用MouseLeave,避免鼠标晃动误触发);Idle触发后执行绘制,执行完清除标记、注销Idle事件,防止重复执行。OnStartDrawElement内部改动:增加DocumentLock文档锁;调换顺序:先执行ed.GetPoint()拾取点,再做图层创建、块导入;删除原来在最前面独立的trCheckLayer图层事务,图层创建挪到拾取点之后;成员变量需要在PipeDrawToolPanel类内部增加两个字段:private bool _drawPending = false; private CodeDefine _pendingCodeDefine = null;修改后的完整代码private void TreeView_MouseDoubleClick(object sender, MouseEventArgs e) { var hit = _treeView.HitTest(e.Location); if (hit.Node == null) return; // 只有叶子节点才响应绘制 if (hit.Node.Nodes.Count 0) return; var codeDef = hit.Node.Tag as CodeDefine; if (codeDef == null) return; // 双击仅设置标记,不执行CAD业务,立刻退出当前Windows消息回调 _pendingCodeDefine = codeDef; _drawPending = true; // 注册Idle事件,等待CAD消息循环空闲后触发绘制 System.Windows.Forms.Application.Idle += OnAppIdleDraw; } /// summary /// Idle延迟执行绘制,切换消息周期,规避双击消息栈锁冲突 /// /summary private void OnAppIdleDraw(object sender, E