/ / Encerramento do PowerPoint após o término do Slideshow - c #, .net, powerpoint, office-interop

Fechando o PowerPoint após o término do Slideshow - c #, .net, powerpoint, office-interop

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 № 1

Seu 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.