Slidshow完成后关闭PowerPoint

时间:2017-02-21 15:41:49

标签: c# .net powerpoint office-interop

我使用以下代码显示和关闭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将保持打开状态。

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

1 个答案:

答案 0 :(得分:0)

您的代码:

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

首先关闭演示文稿,它会销毁演示文稿对象,然后尝试访问不存在的演示文稿对象的父Application对象。我怀疑这会更好:

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

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