Slidshow 完成后关闭 PowerPoint

Closing PowerPoint After Slidshow finished

我使用以下代码来显示和关闭 PowerPoint 幻灯片:

private void StartSlideshow() {
    var opApp = new Microsoft.Office.Interop.PowerPoint.Application();
    ppApp.SlideShowEnd += PpApp_SlideShowEnd;

    var ppPresentation = ppApp.Presentations.Open(_filename, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
    var settings = ppPresentation.SlideShowSettings;
    settings.Run();
}

private void PpApp_SlideShowEnd(Microsoft.Office.Interop.PowerPoint.Presentation Pres)  {
    Pres.Saved = Microsoft.Office.Core.MsoTriState.msoTrue;
    Pres.Close();
    Pres.Application.Quit();
}

现在,当我尝试关闭应用程序 (Pres.Application.Quit()) 时,我收到以下异常:

Application (unknown member) : Invalid request.  This operation cannot be performed in this event handler.

我知道失败的原因(试图终止创建事件的应用程序),但如果我不运行此命令,PowerPoint 将保持打开状态。

解决这个问题的正确方法是什么?

您的代码:

Pres.Close();
Pres.Application.Quit();

这首先关闭演示文稿,这会破坏演示文稿对象,然后尝试访问不存在的演示文稿对象的父应用程序对象。我怀疑这样会更好:

Pres.Close();
ppApp.Quit();

一般情况下永远不会有超过一个PowerPoint实例;您可能想要验证应用程序对象的 Presentations.Count 属性 在您的 Pres.Close 之后是否为 0。如果不是0,用户可能已经打开了PPT和另一个文件,所以你可能不想突然关闭应用程序。