1. 原理
autocad本身不支持多线程,需使用SynchronizationContext将工作线程托管到autocad主线程执行
参考:https://www.codeproject.com/Articles/31971/Understanding-SynchronizationContext-Part-I
2. 代码
[CommandMethod("DrawLine")]
public void DrawLineInThread()
{
var currentContext = Autodesk.AutoCAD.Runtime.SynchronizationContext.Current;
if (currentContext == null)
{
currentContext = new Autodesk.AutoCAD.Runtime.SynchronizationContext();
}
var task = Task.Factory.StartNew(() =>
{
currentContext.Post(DrawLine, null);
});
}
private void DrawLine(object state)
{
var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.CurrentDocument;
var db = HostApplicationServices.WorkingDatabase;
using (var lockDoc = doc.LockDocument()) // 需 lock document 否则会出现{eLockViolation} 导致文件崩溃
{
using (

该文章介绍了如何在AutoCAD环境中,由于其本身不支持多线程,通过SynchronizationContext来托管工作线程并在主线程执行操作,以避免锁冲突和文件崩溃。示例代码展示了如何创建一个命令方法DrawLine,在后台线程安全地绘制线段到模型空间。
最低0.47元/天 解锁文章
1996

被折叠的 条评论
为什么被折叠?



