我有Visual Studio中的作用是制定了一个非常小而简单的VB应用程序:VB应用程序留下hunging背景Excel进程截至申请退出
- 打开Excel工作簿(其中包括一些计算公式)
- 向INPUT单元中输入参数值
- 从预定义的单元格中检索结果的值。
Excel运行时没有人机界面(即Excel_Application.Visible = False
)。
一旦计算完成(以及结果的检索)下面的命令被执行:即使经过
:
Excel_Workbook.Close(False)
Excel_Workbook = Nothing
Excel_Application.Quit()
Excel_Application = Nothing
:
这些语句被执行时,在看任务管理器被示出一个Excel过程时。当应用程序被要求结束时(例如,点击窗口的“X”按钮),该过程被移除。
需要注意的是,如果我打开图形界面,任务栏中的图标在Excel_Application.Quit()
后消失,但后台进程仍然存在。
我需要在不关闭应用程序的情况下不保留后台进程的能力。
我在网上搜索并找到了一些建议,但都没有成功。
我非常感谢任何富有成效的建议。
也许这篇文章可以帮助https://开头stackoverflow.com/q/158706/1050927,前3名(通过投票)应该有帮助 – Prisoner
直到所有接口引用被释放后,Excel才能退出。当垃圾收集器运行时会发生这种情况,就像您的vb.net应用继续执行有用的工作时一样。或者当你关闭它。所以一个粗略的诊断是你的vb.net应用程序不再做任何有用的事情。是的,你可以退出它。或者如果想要强制它,则调用GC.Collect。但是,请注意放置它的位置,它应该放在调用此方法的代码中,或者在调试时不会执行此任务。 –
谢谢@HansPassant您的评论。我应该添加一些更多的细节......发布的代码是最终成为DLL一部分的类的一部分。该DLL将被组装成一个SQL SERVER函数,由存储过程调用,因此不能从调用过程中调用GC。意思是,整个事情必须在DLL中独立。另外一个观察:当在调试和手动循环下运行时,Excel实例出现,但是在某些时候,它们消失了(例如,达到7并触发第8个时,只剩下一个)。 – FDavidov