Как правильно очистить объекты excel com. Подвесной процесс первенствовать работает в диспетчере задач, когда исключение во время работы с объектомОчистка и закрытие interop excel com объекта при возникновении исключения. Winforms vb.net
Если нет ошибок, то после выхода из приложения не существует excel.exe процесс оставил менеджер задач
Мой пример кода , Если вы закомментируете строку ошибки и закройте приложение, все будет хорошо. Как обрабатывать очистку в случаях ошибок, таких как это?
Imports Microsoft.Office.Interop
Public Class Form1
Private xlApp As Excel.Application
Private xlWorkBook As Excel.Workbook
Private misValue As Object
Property xlWorkSheet As Excel.Worksheet
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
''EXCEL CREATION/INITAILIAZATION
misValue = System.Reflection.Missing.Value
xlApp = New Microsoft.Office.Interop.Excel.Application()
If xlApp Is Nothing Then
MessageBox.Show("Excel is not properly installed!!")
xlApp = Nothing
End If
xlWorkBook = xlApp.Workbooks.Add(misValue)
''WRITE TO WORKSHEET
xlWorkSheet = xlWorkBook.Sheets("sheet1")
xlWorkSheet.Cells(1, 1) = "THIS"
xlWorkSheet.Cells(1, 2) = "IS"
xlWorkSheet.Cells(1, 3) = "A"
xlWorkSheet.Cells(1, 4) = "TEST"
''FORCEFULLY CAUSING ERROR, NOW THE EXCEL PROCESS HANGING IN TASK MANAGER
xlWorkSheet.Cells(1, -1) = "ERROR LINE"
''SAVE WORKSHEET
Dim Name = DateTime.Now.ToString("s").Replace(":", "_")
Dim Dir = AppDomain.CurrentDomain.BaseDirectory & Name & "Output.xls"
xlApp.DisplayAlerts = False
xlWorkBook.CheckCompatibility = False
xlWorkBook.DoNotPromptForConvert = True
xlWorkBook.SaveAs(Dir, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, _
Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue)
Catch ex As Exception
Dim exMsg = ex.Message
Finally
''TIME TO CLEAN EXCEL STUFF
Cleanup()
End Try
End Sub
Private Sub Cleanup()
ReleaseObject(xlWorkSheet)
ReleaseObject(xlWorkBook)
xlApp.Quit()
ReleaseObject(xlApp)
End Sub
Private Sub ReleaseObject(ByRef obj As Object)
Try
If Not IsNothing(obj) And System.Runtime.InteropServices.Marshal.IsComObject(obj) Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
End If
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
обновил мой ответ по поводу исправления в Cleanup суб – glant
тем, кто давших этот ответ вниз ... пожалуйста, как любезно объяснить, почему или указать на лучший ответ ... Я задал вопрос и спросил его о переполнении стека, а потом выяснил, как заставить его работать и опубликовать это ... Только потому, что я не знаю, кто его отметил, не должен означать, что вы должны действовать незрелыми – glant