我使用以下代码显示和关闭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将保持打开状态。
解决这个问题的正确方法是什么?
答案 0 :(得分:0)
您的代码:
Pres.Close();
Pres.Application.Quit();
首先关闭演示文稿,它会销毁演示文稿对象,然后尝试访问不存在的演示文稿对象的父Application对象。我怀疑这会更好:
Pres.Close();
ppApp.Quit();
在一般情况下,PowerPoint不会有多个实例;你可能想要在Pres.Close之后验证应用程序对象的Presentations.Count属性是否为0。如果它不是0,则用户可能已经打开了PPT和另一个文件,因此您可能不想突然关闭该应用程序。