CAD.NET关闭报错eNodocument

使用.NET打开、修改和保存CAD图形文档时时,在调用CloseAndDiscard或CloseAndSave方法后报异常eNodocument

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[CommandMethod("OpenAndSave", CommandFlags.Session)]
public static void OpenAndSave()
{
    try
    {
        DocumentCollection docsMgr = Application.DocumentManager;
        Document doc = docsMgr.Add("map2d.dwt");
        docsMgr.MdiActiveDocument = doc;
        using (var docLck = doc.LockDocument())
        {
            doc.Database.SaveAs("D:\\AA.dwg", true, DwgVersion.AC1800, null);
            doc.CloseAndDiscard();  //此处运行后报异常:eNodocument
        }
    }
    catch (System.Exception ex)
    {
    }
}

原来,为了防止多进程对图形文件进行操作,使用LockDocument方法上了个锁,使用的是using语法。问题就在于此,当using内调用CloseAndDiscard后,文档将不再存在(eNoDocument),然后此后默认会调用docLck的Dispose方法,故报错。修改代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[CommandMethod("OpenAndSave", CommandFlags.Session)]
public static void OpenAndSave()
{
    try
    {
        DocumentCollection docsMgr = Application.DocumentManager;
        Document doc = docsMgr.Add("map2d.dwt");
        var prevActDoc = docsMgr.MdiActiveDocument;
        docsMgr.MdiActiveDocument = doc;
        using (var docLck = doc.LockDocument())
        {
            doc.Database.SaveAs("D:\\AA.dwg", true, DwgVersion.AC1800, null);
        }
        docsMgr.MdiActiveDocument = prevActDoc;
        doc.CloseAndDiscard();
    }
    catch (System.Exception ex)
    {
    }
}
posted @   我也是个傻瓜  阅读(350)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-02-26 缩放地图后格网问题
2015-02-26 ArcGIS放射状流向地图
点击右上角即可分享
微信分享提示