操作完成后释放Excel * 32进程
试图找出为什么我的EXCEL * 32过程仍然在使用,直到我的应用程序和excel文件都closures。 在创build之后,我必须丢失一些东西,就像这个代码之后,应用程序保存在EXCEL * 32资源中。 任何build议让它在出口操作后“放手”完成?
此外,我不想closures新创build的Excel工作表,我只想释放与我的实际.net应用程序相关的资源。
Application xls = new Application(); xls.SheetsInNewWorkbook = 1; // Create our new excel application and add our workbooks/worksheets Workbook Workbook = xls.Workbooks.Add(); Worksheet CrossoverPartsWorksheet = xls.Worksheets[1]; // Create our new excel application and add our workbooks/worksheets Workbook Workbook = xls.Workbooks.Add(); Worksheet CrossoverPartsWorksheet = xls.Worksheets[1]; ///////////////////////////////////////// // < DO EXCEL EXPORT OPERATIONS HERE > // ///////////////////////////////////////// // Release our resources. Marshal.ReleaseComObject(Workbook); Marshal.ReleaseComObject(CrossoverPartsWorksheet); Marshal.ReleaseComObject(xls);
当你写
Workbook Workbook = xls.Workbooks.Add();
CLR不仅为Workbook
创build了RCW (运行时可调用包装器)对象,还为Workbooks集合创build了对象(因为您需要的对象将用于Add()
方法)。 如果CLR创buildRCW对象,并且不保留引用,则不能最终确定它。
所以,主要规则: 你应该避免双点呼叫expression式 :
var workbooks = xls.Workbooks; var workbook = workbooks.Add(); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks);
Marshal.FinalReleaseComObject(xls)
就是你要找的东西。