gpt4 book ai didi

c# - 外部关闭excel进程时的错误处理

转载 作者:行者123 更新时间:2023-11-30 23:26:00 26 4
gpt4 key购买 nike

我正在编写一个与 excel 交互的程序。当 excel 通过任务管理器被杀死时,我在关闭我的应用程序方面遇到了一些问题。

当我的程序启动时,它设置 Excel.Application ObjApp = new Excel.Application();

当它关闭时,它以

结束
if (ObjApp != null)
{
ObjApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
ObjApp.Quit();

Environment.Exit(0);

但是,如果 excel 通过任务管理器被终止并且我退出,我会得到这个

"NullReferenceException was unhandled by user code" at ObjApp.Quit();

基本上我需要弄清楚的是怎么说

"If ObjApp (My instance of Excel) is still available, Quit it, Else dont." How can I solve this?

最佳答案

你不应该担心你无法控制的事情。用户是否决定终止你的程序正在使用的 Excel 应用程序不是你应该试图弄清楚的事情(没有安全的方法来确定是否是这种情况,你可以总是以竞争条件结束,但我们不要偏离轨道)。

那你该怎么办?实现代码来处理您的应用程序可以处理的任何合理的故障场景。失败的确切原因是什么无关紧要,它可以是任何东西:它可以是用户关闭应用程序,但也可能是一些模糊的 Excel 错误导致应用程序崩溃,操作系统 打嗝,硬件故障,你有什么。

你是怎么做到的?好吧,使用exception handling :

try
{
//Normal code path goes here. Assume appObj is running;
ObjApp.Quit();
}
//optional catch clauses here
finally
{
//Safe clean up you want running in normal execution or any managable
//scenario. By safe I mean you shouldn't be handling/saving/modifying
//any sensitive data, you should just clean up your COM objects.
//Anything potentially unsafe should be handled in specific catch
//clauses where you know the nature of the exception and you can take
//specific measures to recover or shut down safely.

//In some unrecoverable scenarios this might not even run.
Marshal.FinalReleaseComObject(ObjApp);
}

您可以为特定的异常类型添加catch 子句以用于登录目的或通知用户发生了意外情况; COMException 在我看来是一个不错的选择,任何其他异常都应该向上传递到调用堆栈,让其他更了解它的人处理。

关于c# - 外部关闭excel进程时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com