perf: 副实例关闭改直接 Kill(消除'模型已修改'弹窗 10 秒阻塞)
根因:副实例检测(动画/高亮)修改了文档 → 优雅关闭(CloseMainWindow) 触发 NW 原生'模型文件已修改,是否保存'模态弹窗 → WaitForExit(10s) 超时 → Kill——每任务浪费约 10 秒。 修复:副实例是临时检测进程(检测已完成、报告已回传)——直接 Kill (TerminateProcess 不触发弹窗);进程退出后句柄释放(WaitForExit 5s), 工作目录清理重试机制不受影响。 验证:F1 任务 60 秒完成(含副实例启动+就绪+检测),关闭秒级无弹窗
This commit is contained in:
parent
1700eeaa52
commit
033b639121
@ -252,18 +252,21 @@ namespace NavisworksTransport.Core.Services
|
|||||||
{
|
{
|
||||||
if (!process.HasExited)
|
if (!process.HasExited)
|
||||||
{
|
{
|
||||||
process.CloseMainWindow();
|
// 🔥 直接强制关闭(不优雅退出):副实例是临时检测进程(检测已完成、报告已回传),
|
||||||
if (!process.WaitForExit(10000))
|
// 动画/高亮修改过文档 → 优雅关闭会弹出“模型文件已修改,是否保存”对话框,
|
||||||
|
// 模态弹窗阻塞 WaitForExit 直到超时(10 秒)——拖慢批处理。
|
||||||
|
// Kill(TerminateProcess)不触发该弹窗;句柄由进程退出释放(下方 WaitForExit 等待)。
|
||||||
|
process.Kill();
|
||||||
|
if (!process.WaitForExit(5000))
|
||||||
{
|
{
|
||||||
process.Kill();
|
LogManager.Warning($"[实例管理] 副实例强杀后未及时退出(端口 {handle.Port})");
|
||||||
LogManager.Warning($"[实例管理] 副实例未优雅退出,已强制关闭(端口 {handle.Port})");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 确保进程完全退出(释放模型文件句柄,供调用方清理工作目录)
|
// 确保进程完全退出(释放模型文件句柄,供调用方清理工作目录)
|
||||||
if (!process.HasExited)
|
if (!process.HasExited)
|
||||||
{
|
{
|
||||||
process.WaitForExit(10000);
|
process.WaitForExit(5000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user