以下內容轉自驚驚博客,他博客內容太多了,有點難翻出具體在哪一篇博客里,你自己去翻翻找找哦!
// 後臺處理文件的代碼的邏輯大致如下
 - using Database sdb =
- HostApplicationServices.WorkingDatabase
- ?? throw new ArgumentNullException($"必须要存在一个前台文档!");
- try
- {
- using var db = new Database(false, true);
- db.ReadDwgFile(fileFullPath, FileShare.Read, false, "");
- db.CloseInput(true);
- HostApplicationServices.WorkingDatabase = db;
- // 開始你的內務處理邏輯,example 批量修改文字樣式中的文字字體!
- using DBTrans tr = new(db);
- // 依次执行所有委托
- foreach (var act in actions)
- act(printLines);
- // 一旦用了布局管理器切换布局,始终在提交事务时候出错
- // AutoCAD错误中断
- // 致命错误: Unhandled Access Violation Reading 0x0010 Exception at CFASC28h
- // 怀疑是全局变量不能保留后台的引用
- // 我是想象成当它保存关闭后,全局变量此时显示一个已经不存在的引用了
- // 但是为什么是事务提交时候检查,而不是保存时候检查呢?我并不知道
- // 所以顶替回来居然好了...真是邪门玩意
- // 这样还说明了必须要存在一个前台文档,否则切换不回来。(可以set null吗)
- HostApplicationServices.WorkingDatabase = sdb;
- db.SaveAs(fileFullPath, true, DwgVersion.Current, db.SecurityParameters);
- }
- catch (Exception ex)
- {
- throw new ArgumentException($"发生错误文件:{fileFullPath}\n错误类型:{ex.Message}");
- }
- finally
- {
- HostApplicationServices.WorkingDatabase = sdb;
- }
|