如何终止基于C#的Excel应用程序实例?
我正在研究一些小的代码来读取一些Excel文件。 我已经链接了Excel 15的COM库,并使用下面的代码来读取Excel文件:
excelInstance = new Microsoft.Office.Interop.Excel.Application(); Workbook workbook = excelInstance.Workbooks.Open(@excelOpenFileDialog.FileName); Worksheet worksheet = workbook.Worksheets[1]; Range UsedRange = worksheet.UsedRange; int lastUsedRow = UsedRange.Row + UsedRange.Rows.Count - 1;
问题是我不知道如何终止我的处理完成后的Excel实例。 Excel应用程序界面不是一次性的,那么还有另一种方法吗?
处理Excel COM对象可能有点挑剔。 确保完成后在工作簿上调用Close
,然后Quit
Excel.Application的实例。
通过调用FinalReleaseComObject()
释放对象,并为了冗余,显式地使COM对象为null:
Runtime.InteropServices.Marshal.FinalReleaseComObject(sheet); Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook); Runtime.InteropServices.Marshal.FinalReleaseComObject(app); sheet = null; workbook = null; app = null;
最后,如果在调用适当的处置方法,明确释放它们,并清空对象的引用之后,如果这些凿子仍然没有消失,请调用垃圾收集器:
GC.Collect(); GC.WaitForPendingFinalizers();
希望这将最终做到这一点。
干杯。
编辑:另外,一定要在exception处理程序中执行此操作,如果在使用Interop对象时有可能会发生代码炸弹,或者是因为它们。 即使父节点终止,你也将离开僵尸进程。
根据这里的MSDN文档,使用Quit()
方法closures您的实例,如下所示:
var excelInstance = new Microsoft.Office.Interop.Excel.Application() // Do stuff excelInstance.Quit();