我有一个应用程序,它使用 COM 互操作来创建一个电子表格,该电子表格在客户端计算机上的 Excel 中打开。但是,如果我查看任务管理器,当用户关闭 Excel 时,EXCEL.exe 进程并不总是结束。
如果我保存工作簿并以编程方式关闭 Excel,我只需使用Marshal.ReleaseComObject()
清理,但由于我依赖于手动关闭程序,我不知道该怎么做。有什么建议么?
在释放所有进程外对象之前,Excel 无法终止。所以它只是隐藏其用户界面并继续运行。直到程序退出或清空所有 Excel 对象引用并且终结器线程运行。退出程序将是一个显而易见的解决方案。或者您可以强制终结器线程运行:
GC.Collect();
GC.WaitForPendingFinalizers();
ReleaseComObject() 很少起作用,因为很容易忘记中间 COM 对象引用。与 WorkBooks[index] 一样,这是一个您看不到的枚举器。让 GC 自己做出决定将是更明智的选择,如果你继续运行和工作,那么这种情况就会发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)