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和另一个文件,所以你可能不想突然关闭应用程序。
我使用以下代码来显示和关闭 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和另一个文件,所以你可能不想突然关闭应用程序。