Eu uso o seguinte código para mostrar e fechar um slide do 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();
}
Agora, quando tento fechar o aplicativo (Pres.Application.Quit()
) Recebo a seguinte exceção:
Application (unknown member) : Invalid request. This operation cannot be performed in this event handler.
Eu tenho uma pista porque isso falha (tentando matar o aplicativo que criou o evento), mas se eu não executar este comando, o PowerPoint permanece aberto.
Qual é o caminho certo para resolver isso?
Respostas:
0 para resposta № 1Seu código:
Pres.Close();
Pres.Application.Quit();
Isso primeiro fecha a apresentação, que destrói o objeto de apresentação, em seguida, tenta acessar o objeto Application pai do objeto de apresentação inexistente. Eu suspeito que isso funcionará melhor:
Pres.Close();
ppApp.Quit();
Nunca haverá mais de uma instância dePowerPoint em circunstâncias normais; talvez você queira verificar se a propriedade Presentations.Count do objeto de aplicativo é 0 após seu Pres.Close. Se não for 0, o usuário já poderá ter o PPT e outro arquivo abertos, portanto, talvez você não queira fechar abruptamente a aplicação.