挂起互操作COM对象的问题

Tyl*_*eat 7 c# com excel interop

我有一个应用程序使用COM互操作来创建一个电子表格,该电子表格在客户端的机器上的Excel中打开.但是,如果我查看任务管理器,当用户关闭Excel时,似乎并不总是结束EXCEL.exe进程.

如果我正在保存工作簿并以编程方式关闭Excel,我只会用它Marshal.ReleaseComObject()来清理,但由于我依赖于手动关闭程序,我不知道该怎么做.有什么建议?

Han*_*ant 9

在释放所有进程外对象之前,Excel无法终止.所以它只是隐藏了它的用户界面并继续运行.直到您的程序退出或者您的所有Excel对象引用为空并且终结器线程运行.退出程序将是一个明显的解决方案.或者您可以强制终结器线程运行:

GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)

ReleaseComObject()很少有效,因为它很容易忘记中间COM对象引用.像WorkBooks [index]一样,这是一个你看不到的枚举器.让GC做出自己的决定将是更明智的选择,如果你继续跑步和做工作那么就会发生.