Instancja programu Excel (excel.exe) w menedżerze zadań nie jest zabijana po zakończeniu wykonywania przycisku.
Private Sub Extract_Click(sender As Object, e As EventArgs) Handles Extract.Click
Dim xlApp As New Excel.Application
Dim wbXLsource As Excel.Workbook
Dim wbXLtarget As Excel.Workbook
Dim shXLsource As Excel.Worksheet
Dim shXLtarget As Excel.Worksheet
Dim datestart As Date = Date.Now
wbXLsource = xlApp.Workbooks.Open(xlSourcePath)
wbXLtarget = xlApp.Workbooks.Open(xlTargetPath)
Dim dateEnd As Date = Date.Now
End_Excel_App(datestart, dateEnd)
End Sub
Private Sub End_Excel_App(datestart As Date, dateEnd As Date)
Dim xlp() As Process = Process.GetProcessesByName("EXCEL")
For Each Process As Process In xlp
If Process.StartTime >= datestart And Process.StartTime <= dateEnd Then
Process.Kill()
Exit For
End If
Next
End Sub
Próbowałem użyć koncepcji garbage collector również, ale wersja Excel zostaje zabita dopiero po zamknięciu aplikacji. Muszę zamknąć wystąpienie programu excel (excel.exe) po zakończeniu wykonywania przycisku
Odpowiedzi:
0 dla odpowiedzi № 1Użyj tego kodu .... Używałem tego i zamyka za każdym razem
For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
If proc.MainWindowTitle.Trim() = "" Then
proc.Kill()
End If
Next
A jeśli masz funkcję obsługi błędów Try Catch ...
Try
"stuff more stuff
Catch Ex as Exception
For Each Proc in System.......
......
Next
Finally
GC.Collect()
End Try
Działa za każdym razem.
0 dla odpowiedzi nr 2
Zamykanie aplikacji przez wywołanie xlApp.Quit()
zamyka go, ale nie zostanie usunięty, jeśli z pamięci.
Aby uwolnić pamięć, możesz postępować zgodnie z radami podanymi przez Świetna odpowiedź Siddharth Rout:
Private Sub ReleaseObject(ByVal obj As Object)
Try
Dim intRel As Integer = 0
Do
intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
Loop While intRel > 0
MsgBox("Final Released obj # " & intRel)
Catch ex As Exception
MsgBox("Error releasing object" & ex.ToString)
obj = Nothing
Finally
GC.Collect()
End Try
End Sub