如果我通过自动化创建 PowerPoint 应用程序,当用户关闭主窗口时,该过程仍保留在任务管理器中。我可以假设这是因为我的应用程序持有对 PowerPoint 应用程序的引用,因此无法对其进行垃圾回收。但是我怎么知道用户关闭了 PowerPoint 应用程序以便我可以释放对它的所有引用?这里似乎是先有鸡还是先有蛋的问题。下面是我在表单加载时调用的函数。如果 PowerPoint 已打开,它将使用当前实例。如果没有,它会创建一个新实例。
Private Function TryAttachToApplication() As PowerPoint.Application
Dim app As PowerPoint.Application
Try
app = CType(Marshal.GetActiveObject("PowerPoint.Application"), PowerPoint.Application)
Catch ex As COMException
app = New PowerPoint.Application
End Try
app.Visible = True
Return app
End Function
最佳答案
If PowerPoint is already opened, it uses the current instance. If not, it creates a new instance.
我不这么认为。 PowerPoint 只允许自身的一个实例,但有时它在自动化时可能会错误地留下僵尸实例。它不像 Word 或 Excel,您可以在其中根据需要创建自己的附加实例。
如果已经有一个实例在运行,您将获得对它的引用。 如果没有正在运行的实例,您将创建一个新实例并获取对该实例的引用。
释放对 PPT 实例的引用不应导致任何问题。如果用户一开始就打开它,它应该保持打开状态。
问题更可能是:“我是否应该调用PPT应用程序的.Quit方法?”
一种方法是检查 app.Presentations.Count 我不记得当通过 Automation 调用 PPT 时是否会自动创建一个新的空白演示文稿;我记得,它没有,但你会想要仔细检查一下。 IAC,如果 .Count > 0(或者可能是 1),您知道您已经获得了对 PPT 的预先存在实例的引用......即,有人已经在使用它......所以你不想退出他们。
关于c# - 当用户关闭主窗口时,PowerPoint 进程不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433507/