2012-10-04 42 views
0

可能重复:
How to properly clean up Excel interop objects in C#Excel表单不关闭

我有一组功能。如果函数传递,然后我通过一个名为ExcelRecorder() 功能打印在名为WebServices_output.xlsx Excel工作表中的一些消息如果失败,那么我传递一些通过ExcelRecorder()失败的消息

上午发布我的代码下面

public void ExcelRecorder(int error, string detailmessage, string message, int row) 
     { 
      Excel.Application xlApp = new Excel.Application();     
      Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/WebServiceTestCases_Output.xlsx"); 
      Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
      Excel.Range xlRange = xlWorksheet.UsedRange;   
       if (!string.IsNullOrEmpty(message)) 
       { 
        ((Range)xlWorksheet.Cells[row, "M"]).Value2 = "FAIL"; 
        ((Range)xlWorksheet.Cells[row, "N"]).Value2 = error; 
        ((Range)xlWorksheet.Cells[row, "O"]).Value2 = detailmessage; 
        ((Range)xlWorksheet.Cells[row, "P"]).Value2 = message; 
       } 
       else 
       { 
        ((Range)xlWorksheet.Cells[row, "M"]).Value2 = "PASS"; 
        ((Range)xlWorksheet.Cells[row, "N"]).Value2 = ""; 
        ((Range)xlWorksheet.Cells[row, "O"]).Value2 = ""; 
        ((Range)xlWorksheet.Cells[row, "P"]).Value2 = ""; 
       } 
      xlWorkbook.Save(); 
      xlWorkbook.Close(0,0,0); 
      xlApp.Quit(); 
     } 

虽然我特别节省我的工作簿,关闭它,然后退出它,当我打开任务管理器,我看EXCEL.EXE仍在运行。当我运行五次或六次ExcelRecorder()时,在任务管理器中看到五个或六个Excel.EXE,并且程序崩溃。

这里有什么问题?为什么工作簿没有关闭,虽然我已经添加了关闭它的代码行?

+0

这是一个重复的,挂在我会帮您找到它。 –

回答

2

你需要这样做:

xlApp.Quit(); 

然后将此:

System.Runtime.Marshal.ReleaseComObject(xlApp);