使用.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) { } } |