-1
정리 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
업데이트 의례 이유를 설명하거나 더 나은 해답을 지적하십시오 방법 ... 다운이되었습니다 사람들에게 정리 서브 – glant
의 수정에 대한 내 대답은 ... I 질문이 있었고 스택 오버플로에 대해 물어 봤고 나중에 작동하도록 게시하고 게시하는 방법을 알아 냈습니다 ... 누가 그것을 표시했는지 모르기 때문에 미성숙 한 행동을해서는 안됩니다. – glant