2012-05-03 112 views
2

如果我通過自動化創建PowerPoint應用程序,則當用戶關閉主窗口時,該過程將保留在任務管理器中。我可以認爲這是因爲我的應用程序持有對PowerPoint應用程序的引用,因此無法收集垃圾。但是,我怎麼知道用戶關閉了PowerPoint應用程序,以便我可以釋放對它的所有引用?看起來像雞或雞蛋問題在這裏。以下是我在表單加載時調用的函數。如果PowerPoint已經打開,它將使用當前實例。如果不是,它創建一個新的實例。當用戶關閉主窗口時PowerPoint過程將不會關閉

Private Function TryAttachToApplication() As PowerPoint.Application 
     Dim app As PowerPoint.Application 

     Try 
      app = CType(Marshal.GetActiveObject("PowerPoint.Application"), PowerPoint.Application) 
     Catch ex As COMException 
      app = New PowerPoint.Application 
     End Try 

     app.Visible = True 
     Return app 
End Function 

回答

1

如果PowerPoint已經打開,它採用了當前實例。如果不是,它創建一個新的實例。

我不這麼認爲。 PowerPoint只允許其自身的一個實例,但有時它可能會錯誤地將殭屍實例置於自動化之後。它的行爲不像Word或Excel,您可以根據需要創建自己的add'l實例。

如果已經有一個實例在運行,您將獲得對它的引用。 如果沒有正在運行的實例,您將創建一個新實例並獲取對該實例的引用。

釋放對PPT實例的引用不應引起任何問題。如果用戶開始使用它,它應該保持打開狀態。

問題更可能是:「我應該調用PPT應用程序的.Quit方法嗎?」

一種方法是檢查app.Presentations.Count 我不記得PPT是否會在通過自動化調用時自動創建新的空白演示文稿;我記得,它沒有,但你會想要重新檢查一下。 IAC,如果.Count> 0(或者也許是1),你知道你已經獲得了一個PPT的預先存在的實例的引用......即,某人已經在使用它...所以你不想退出他們。