0
我嘗試創建一個類,在那裏我想要使用excel實例,並且我希望退出該excel實例(如this answer所述。仍然可以debug it properly我分開垃圾總彙方式如下:。退出excel實例作爲類成員點播
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim xlsInst As New ExcelInst
GC.Collect()
GC.WaitForPendingFinalizers()
End Sub End Class
Public Class ExcelInst
Sub New()
Dim myxlApp As New Excel.Application
Dim myxlWb As Excel.Workbook
'~~> Add a new Workbook
myxlWb = myxlApp.Workbooks.Add
'~~> Display Excel
myxlApp.Visible = True
myxlApp.Quit()
End Sub End Class
觀察任務管理器的Excel實例儘快形式加載正確退出,但我不滿意類原因我想有myxlApp
私有變量和myxlWB
。但是,如果我將我的課程更改爲
Public Class ExcelInst
Private myxlApp As New Excel.Application
Private myxlWb As Excel.Workbook
Sub New()
'~~> Add a new Workbook
myxlWb = myxlApp.Workbooks.Add
'~~> Display Excel
myxlApp.Visible = True
myxlApp.Quit()
End Sub
End Class
excel不再按需求關閉。任何人都知道爲什麼第一個片段的工作原理(根據我的要求,第二個不是嗎?)
你必須調用ReleaseCom對象http://stackoverflow.com/questions/15697282/excel-application-not-quitting-after-calling-quit在對象的構造函數中打開和關閉excel看起來很奇怪。此外,在您的加載中,xlsInst對象在調用垃圾回收時仍然存在。 – 2014-11-04 17:48:33
ReleaseComObject是excactely我試圖避免,因爲它不被推薦(請參閱我的鏈接)。我不想尋找解決辦法,我只想知道爲什麼第一個工作,第二個不是。我將在我的文章中澄清。 – ruedi 2014-11-04 18:41:29
我會假設,因爲您在GC.Collect之前仍然有對xlsInst的引用,並且該對象包含對excel的引用,GC將不會收集。嘗試在收集之前做xlsInst = Nothing,並且也可以將該類中的變量設置爲無。 – 2014-11-04 19:14:12