2016-11-01 5 views
0

Excel.Application()이 무엇이든지 공개되기를 원치 않는 반면 문제의 진정한 고통이 있습니다. 새 클래스가 인스턴스화되고 즉시 처리 된 후에도 프로세스 목록에 여전히 나타납니다.Excel.Application 클래스를 올바르게 처리하는 방법

if (_ExcelApp == null) 
    _ExcelApp = new Microsoft.Office.Interop.Excel.Application(); 
Dispose(); 

public void Dispose() 
{ 
    if (_ExcelApp != null) 
    { 
     try 
     { 
      _ExcelApp.Quit(); 
      Marshal.FinalReleaseComObject(_ExcelApp); 
     } 
     catch (Exception) { } 
      _ExcelApp = null; 
    } 
} 

도와주세요!

+1

[관련?] (http://stackoverflow.com/questions/27930307/why-does-microsoft (이것은 물론 가능하면) 모든 코드를 보여 주면 더 좋을 것입니다 앞서 언급 한 것처럼 -office-interop-excel-application-quit-leave-the-background) – stuartd

+0

이 [질문] (http://stackoverflow.com/questions/9962157/safely-disposing-excel-interop-objects-in-c) 확인 – shadow

+0

이것을 확인하십시오 http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects –

답변

3

_ExcelApp와 관련된 모든 COM 개체가 릴리스되지 않았기 때문에 해제되지 않습니다. 모든 코드를 제공하면 더 명확해질 수 있습니다. 그런 시도 캐치에

Workbooks wb =_ExcelApp.Workbooks; 
Workbook book = wb.Add(); 

:

  try 
      { 
       book.Close(); 
       Marshal.ReleaseComObject(book); 
       wb.Close(); 
       Marshal.ReleaseComObject(wb); 
       _ExcelApp.Quit(); 
       Marshal.FinalReleaseComObject(_ExcelApp); 
      } 
     catch (Exception) { } 
      _ExcelApp = null; 
    } 

_ExcelApp.WorkBooks.Add(); 새 WorkBook을 만들고이 객체를 해제하지 마십시오. 또한 워크 북 객체도 생성해야합니다.

나는

+0

그래서 각 COM 개체를 사용하고 null로 설정 한 후에는 각 COM 개체를 릴리스해야합니다. 많은 열과 셀, 워크 시트, 워크 북 등을 가지고 있기 때문에 큰 번거 로움이되었습니다. –

+0

원래 개체를 null로 설정하지 않았으므로 아마도 내 결함이었을 것입니다. 따 모조 –