C#利用com操作excel释放进程的解决方法
程序员文章站
2023-12-15 20:44:52
第一个
复制代码 代码如下:system.runtime.interopservices.marshal.releasecomobject(sheets); &...
第一个
复制代码 代码如下:
system.runtime.interopservices.marshal.releasecomobject(sheets);
system.runtime.interopservices.marshal.releasecomobject(worksheet);
system.runtime.interopservices.marshal.releasecomobject(excelapp);
system.runtime.interopservices.marshal.releasecomobject(range);
excelapp = null;
wbclass = null;
sheets = null;
worksheet = null;
range = null;
gc.collect();
gc.waitforpendingfinalizers();
释放不彻底,还是有进程存在。
第二种
复制代码 代码如下:
//调用底层函数获取进程标示
[dllimport("user32.dll")]
public static extern int getwindowthreadprocessid(intptr hwnd, out int processid);
private static void killexcel(microsoft.office.interop.excel.application theapp)
{
int id = 0;
intptr intptr = new intptr(theapp.hwnd);
system.diagnostics.process p = null;
try
{
getwindowthreadprocessid(intptr, out id);
p = system.diagnostics.process.getprocessbyid(id);
if (p != null)
{
p.kill();
p.dispose();
}
}
catch (exception ex)
{
}
}
这个方法比较好,我试过了可以关闭掉进程。