C# 幻灯片放映结束后关闭PowerPoint

C# 幻灯片放映结束后关闭PowerPoint,c#,.net,powerpoint,office-interop,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.O

我使用以下代码来显示和关闭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的实例不会超过一个;在Pres.Close之后,您可能需要验证应用程序对象的Presentations.Count属性是否为0。如果不是0,则用户可能已经打开了PPT和其他文件,因此您可能不想突然关闭应用程序