C# Excel进程在程序终止后仍在运行
我编写了一些C#程序,可以读取Excel文件并输出Excel文件。然而,我注意到,在一天结束时,在程序终止和所有文件关闭之后,我仍有许多Excel进程在运行。以下是我如何处理文件创建和关闭:C# Excel进程在程序终止后仍在运行,c#,excel,com,process,interop,C#,Excel,Com,Process,Interop,我编写了一些C#程序,可以读取Excel文件并输出Excel文件。然而,我注意到,在一天结束时,在程序终止和所有文件关闭之后,我仍有许多Excel进程在运行。以下是我如何处理文件创建和关闭: Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBA
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
...
wb.Close(true, saveDirectory + "\\" + reportName, false);
xlApp.Quit();
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(xlApp);
this.Close();
我错过什么了吗?任何建议都将不胜感激
注意。您的代码没有释放所有COM引用(例如,
xlApp.Workbooks.Add
创建对从未释放的Workbooks
对象的引用)。因此,Excel实例不会关闭,如中所述,并在许多StackOverflow问题中进行了详细讨论
当COM检测到客户端有一段时间没有ping时,Excel实例最终将在进程终止后关闭。您的代码没有释放所有COM引用(例如,
xlApp.Workbooks.Add
创建对从未释放的工作簿
对象的引用)。因此,Excel实例不会关闭,如中所述,并在许多StackOverflow问题中进行了详细讨论
当COM检测到客户端有一段时间没有发出ping时,Excel实例最终将在进程终止后关闭。我认为这看起来很简单。也许你可以编写一个简短的控制台程序,在观看电脑进程的同时循环1000条左右的信息。我想可能是
…
部分没有显示的内容导致了你的问题。我想你应该在这里找到答案,我想这看起来很简单。也许您可以编写一个简短的控制台程序,在观看PC上的进程时循环执行1000个左右的指令。我想可能是…
部分没有显示的内容导致了您的问题。我想您应该在这里找到您的答案,我已经更改了封送.ReleaseComObject(wb)
towhile(Marshal.ReleaseComObject(wb)!=0){Marshal.ReleaseComObject(wb);}
这样做行吗?@Kevin-不,这还不够。它不会释放您使用xlApp.Workbooks.Add
引用的工作簿对象。此外,您还应该使用try/finally
来确保即使抛出异常也能释放对象towhile(Marshal.ReleaseComObject(wb)!=0){Marshal.ReleaseComObject(wb);}
这样做行吗?@Kevin-不,这还不够。它不会释放您使用xlApp.Workbooks.Add
引用的工作簿对象。此外,您还应该使用try/finally
来确保即使引发异常也释放对象。