2016-11-01 1 views
0

Ich habe ein echtes Problem, während die Excel.Application() nicht freigegeben werden will, egal was. Auch nachdem eine neue Klasse sofort instanziiert und entsorgt wird, erscheint sie immer noch in der Prozessliste.Wie Sie die Excel.Application-Klasse richtig entsorgen

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; 
    } 
} 

Bitte helfen!

+1

[Verwandte?] (Http://stackoverflow.com/questions/27930307/why-does-microsoft -office-interop-excel-application-quit-leave-the-background) – stuartd

+0

Überprüfen Sie diese [Frage] (http://stackoverflow.com/questions/9962157/safely-disposing-excel-interop-objects-in-c) – shadow

+0

Überprüfen Sie diese http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects –

Antwort

3

Es wird nicht freigegeben, da nicht alle COM-Objekte, die mit _ExcelApp verknüpft sind, freigegeben werden. Wenn Sie den gesamten Code bereitstellen, kann dieser klarer sein.

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

dann in Try-Catch:

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

_ExcelApp.WorkBooks.Add(); Erstellen Sie ein neues WorkBook und Sie geben dieses Objekt nicht frei. Es erstellt auch Arbeitsmappenobjekte, die ebenfalls freigegeben werden müssen.

Wie ich bereits erwähnt wird besser, wenn Sie den gesamten Code zeigen (wenn es natürlich möglich ist)

+0

Also habe ich schließlich jedes COM-Objekt freigegeben, nachdem sie verwendet wurden, und setze sie auf null. Es stellte sich heraus, dass es ein großer Aufwand war, da ich mehrere Bereiche von Spalten und Zellen, Arbeitsblätter, Arbeitsmappen usw. hatte. –

+0

Könnte ich hinzufügen, dass ich die Objekte ursprünglich nicht auf null gesetzt habe, so dass das wahrscheinlich mein Fehler war. Ta Mojo –