CAD.NET关闭报错eNodocument

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

代码如下:

[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方法,故报错。修改代码如下:

[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 @ 2022-02-26 22:16  我也是个傻瓜  阅读(303)  评论(0编辑  收藏  举报