2017-02-21 2 views
0

ich den folgenden Code verwenden, um eine Powerpoint-Folie zu zeigen und schließen:Closing Powerpoint Nach Slidshow fertig

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(); 
} 

Wenn ich jetzt versuchen, die Anwendung zu schließen (Pres.Application.Quit()) Ich erhalte die folgende Ausnahme:

Application (unknown member) : Invalid request. This operation cannot be performed in this event handler. 

Ich habe eine Ahnung, warum dies fehlschlägt (versucht, die Anwendung, die das Ereignis erstellt hat, zu töten), aber wenn ich diesen Befehl nicht ausführen, bleibt PowerPoint geöffnet.

Was ist der richtige Weg, um dies zu lösen?

Antwort

0

Ihr Code:

Pres.Close(); 
Pres.Application.Quit(); 

Das erste schließt die Präsentation, die das Präsentationsobjekt zerstört, versucht dann, die nicht vorhandenen Präsentationsobjekt des Objekts übergeordnete Anwendung zuzugreifen. Ich vermute, das wird besser funktionieren:

Pres.Close(); 
ppApp.Quit(); 

Es wird nie mehr als eine Instanz von PowerPoint unter normalen Umständen sein; Möglicherweise möchten Sie überprüfen, ob die Presentations.Count-Eigenschaft des Anwendungsobjekts nach dem Pres.Close-Wert 0 ist. Wenn es nicht 0 ist, hat der Benutzer möglicherweise bereits PPT und eine andere Datei geöffnet, sodass Sie die Anwendung möglicherweise nicht abrupt schließen möchten.