小编典典

处置Microsoft.Office.Interop.Word.Application

c#

(帖子中有一些后续内容(尚无答案):https :
//stackoverflow.com/q/6197829/314661)

使用以下代码

Application app = new Application();
_Document doc = app.Documents.Open("myDocPath.docx", false, false, false);
doc.PrintOut(false);
doc.Close();

我正在尝试以编程方式打开和打印文件。

问题是每次我运行上面的代码时,都会启动一个新的WINWORD.exe进程,显然这会很快耗尽所有内存。

应用程序类似乎不包含dispose / close或类似方法。

经过一些研究,我(意识到)并将代码更改为以下代码。

 Application app = new Application();
 _Document doc = app.Documents.Open(fullFilePath + ".doc", false, false, false);
 doc.PrintOut(false);
 doc.Close();
 int res = System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
 int res1 = System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

而且我可以看到剩余的参考计数为零,但过程仍然存在吗?

PS:我正在使用Microsoft.Office.Interop库的版本14。


阅读 392

收藏
2020-05-19

共1个答案

小编典典

也许尝试设置doc = null并致电GC.Collect()

编辑,不是我自己的代码,我忘了我从哪里得到的,但这是我用来处理Excel的东西,它可以完成工作,也许您可​​以从中收集一些信息:

public void DisposeExcelInstance()
{
    app.DisplayAlerts = false;
    workBook.Close(null, null, null);
    app.Workbooks.Close();
    app.Quit();
    if (workSheet != null)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
    if (workBook != null)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
    if (app != null)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
    workSheet = null;
    workBook = null;
    app = null;
    GC.Collect(); // force final cleanup!
}
2020-05-19