diff --git a/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs b/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs
index b7617b5585bc3cd44f826c924ea6f5bcf5d2ea78..0c72d27350a554a345e617269e19cc388dba4f1d 100644
--- a/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs
+++ b/src/CAD/IFox.CAD.Shared/Runtime/DBTrans.cs
@@ -169,6 +169,14 @@ public DBTrans(Database database, bool commit = true)
///
/// 事务栈
/// 打开文件,默认提交事务
+ /// 建议用法:
+ /// try
+ /// {
+ /// using var tr = new DBTrans(...);
+ /// ...
+ /// }
+ /// catch (...) { ... }
+ ///
///
/// 要打开的文件名
/// 事务是否提交
@@ -182,7 +190,10 @@ public DBTrans(string fileName,
bool activeOpen = false)
{
if (string.IsNullOrWhiteSpace(fileName))
+ {
+ IsDisposed = true; // 出错后未 Push 会造成 Pop 抛错, 固设为 true
throw new ArgumentNullException(nameof(fileName));
+ }
_fileName = fileName.Replace("/", "\\");// doc.Name总是"D:\\JX.dwg"
@@ -192,6 +203,7 @@ public DBTrans(string fileName,
{
if (activeOpen)
{
+ IsDisposed = true; // 出错后未 Push 会造成 Pop 抛错, 固设为 true
throw new IOException("错误:事务栈明确为前台开图时,文件不存在");
}
else
@@ -220,6 +232,7 @@ public DBTrans(string fileName,
}
catch (Exception e)
{
+ IsDisposed = true; // 出错后未 Push 会造成 Pop 抛错, 固设为 true
throw new IOException($"错误:此文件打开错误:{fileName}\n错误信息:{e.Message}");
}
}
@@ -241,15 +254,27 @@ public DBTrans(string fileName,
if (doc is null)
{
Database = new Database(false, true);
- if (Path.GetExtension(_fileName).ToLower().Contains("dxf"))
+ try
+ {
+ if (Path.GetExtension(_fileName).ToLower().Contains("dxf"))
+ {
+ Database.DxfIn(_fileName, null);
+ }
+ else
+ {
+ Database.ReadDwgFile(_fileName, fileOpenMode, true, password);
+ }
+ }
+ catch (Exception e)
{
- Database.DxfIn(_fileName, null);
+ IsDisposed = true; // 出错后未 Push 会造成 Pop 抛错, 固设为 true
+ Acap.ShowAlertDialog($"错误:此文件打开错误:{fileName}\n格式版本可能高于当前CAD版本\n错误信息:{e.Message}");
+ throw; // 交给调用处处理更灵活,避免再次报错时CAD就直接退出
}
- else
+ finally
{
- Database.ReadDwgFile(_fileName, fileOpenMode, true, password);
+ Database.CloseInput(true);
}
- Database.CloseInput(true);
}
else
{