Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel进程在程序终止后仍在运行_C#_Excel_Com_Process_Interop - Fatal编程技术网

C# 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

我编写了一些C#程序,可以读取Excel文件并输出Excel文件。然而,我注意到,在一天结束时,在程序终止和所有文件关闭之后,我仍有许多Excel进程在运行。以下是我如何处理文件创建和关闭:

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)
to
while(Marshal.ReleaseComObject(wb)!=0){Marshal.ReleaseComObject(wb);}
这样做行吗?@Kevin-不,这还不够。它不会释放您使用
xlApp.Workbooks.Add
引用的工作簿对象。此外,您还应该使用
try/finally
来确保即使抛出异常也能释放对象to
while(Marshal.ReleaseComObject(wb)!=0){Marshal.ReleaseComObject(wb);}
这样做行吗?@Kevin-不,这还不够。它不会释放您使用
xlApp.Workbooks.Add
引用的工作簿对象。此外,您还应该使用
try/finally
来确保即使引发异常也释放对象。