public override void closeSim() { if (simulatorStatus == sinter_simulatorStatus.si_OPEN) { try { closeDocument(); o_xlApp.Quit(); GC.Collect(); GC.WaitForPendingFinalizers(); killExcel(); //If it's still open after quit, kill it dead. Marshal.FinalReleaseComObject(o_xlApp); GC.Collect(); GC.WaitForPendingFinalizers(); o_xlApp = null; } catch (Exception ex) { simulatorStatus = sinter_simulatorStatus.si_ERROR; throw ex; } simulatorStatus = sinter_simulatorStatus.si_CLOSED; } }