【问题标题】:How does closing a windows forms applications and excel.exe processes interact (potentially through the garbage collector)?关闭 Windows 窗体应用程序和 excel.exe 进程如何交互(可能通过垃圾收集器)?
【发布时间】:2012-03-21 04:44:21
【问题描述】:

我可能是唯一一个仍然以这种方式自动化 excel 的人,我正在考虑以更好地处理 COM 对象等的方式来实现它,但现在我只是导入 Microsoft.Office.Interop.Excel 并继续努力。一开始让我很伤心的事情是挂起 excel.exe 进程,但是网上有大量的资源可以修复that。在这一点上,我对自己的处理能力很有信心。

我确实注意到并想知道的一件事是关闭 Windows 窗体应用程序如何与后台运行的 excel.exe 交互,更具体地说,可能是垃圾收集器。我写了很多 excel 自动化projects 并注意到在我运行我的程序 .exe 并完成后,有一个 excel.exe 进程挂起,直到我从 Windows 窗体应用程序关闭弹出窗口。为什么会这样?

在关闭窗口之前,vb.net 不会调用垃圾收集吗?查看我编写的代码,没有提及“关闭应用程序窗口”事件,并且垃圾收集器和释放 COM 对象调用在代码中都是正确的,所以在代码执行之后(其中我的意思是垃圾收集已被调用,如代码中所示)有一个 excel.exe 进程会一直运行,直到我真正关闭 Windows 窗体应用程序窗口。

没有什么紧急的,比什么都好奇,但任何直接的都将不胜感激。谢谢。

【问题讨论】:

  • 您确定您的代码能够杀死 Excel 吗?这对我来说是一个长期存在的问题,以至于我放弃了无窗口 Excel。之后,我建议实施一个明确释放 Excel 的表单关闭事件,并且不要依赖任何垃圾收集器。
  • 在我打开我的程序之前,我保持任务管理器打开并且没有其他 excel.exe 实例显示进程。然后我打开我的程序并执行它(保持 excel 不可见,尽管我已经在 excel 可见且没关系的情况下完成了它)并且将出现一个 excel.exe 实例(或更多,取决于代码)。似乎有 1 个 excel.exe 实例挂起,直到我真正关闭我的 Windows 窗体应用程序,但随后它消失了。正确地杀死 excel 是一件麻烦事,但如果你小心,你绝对可以做到。请参阅我链接的教程和我链接的代码。

标签: vb.net excel com office-interop


【解决方案1】:

确保您在代码块末尾调用了 excel 对象的 Quit 方法,并且您可以进行垃圾收集,但它应该会在短时间内关闭。我有同样的问题,但发现我必须手动处理。

【讨论】:

  • 我在工作簿和应用程序上都调用了 quit 方法。我摆脱了 excel.exe 的所有实例,但是有一个会一直挂起,直到我关闭运行它的 Windows 窗体应用程序,我不明白为什么它要等到那时。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
相关资源
最近更新 更多