12

我正在编写一个需要 MSWord 文档解析器的应用程序。

我正在使用 Microsoft.Office.Interop.Word.Document 从文档中提取文本,但即使我使用 doc.Close() 文档,从 taskManager 我可以看到 winword.exe 没有被杀死,并且在解析后几十个文件会占用很多资源。

close() 是错误的方法吗?

请帮助我,并为我指出如何正确终止这些进程的正确方向。=)

~~~更新~~~

感谢所有的帮助。我使用 app.quit() 并且还运行了一个循环来检查进程并解决问题!=)

4

5 回答 5

19

您是否正在调用Application.Quit ,此外,由于您正在执行 Interop ,因此发布RCW wrapper可能是值得的。

所以基本上是这样的:

yourWordAppObject.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(yourWordAppObject);

注意有些人使用:ReleaseComObject,但有一些潜在的陷阱

于 2011-08-15T20:24:01.520 回答
3

您必须使用 app.quit() 退出应用程序实例。Document.close() 只会关闭文档。我还建议您在完成处理后设置 app.visible = true ,以便您的用户可以在其他所有方法都失败时自行关闭它。

于 2011-08-15T20:34:16.960 回答
3

执行 app.Quit() 后,必须执行 app = null; 根据我的经验,这将防止剩余的进程徘徊。只要确保在您的异常处理程序中也执行 app.Quit() 和 app = null 即可。

于 2011-08-15T20:50:01.630 回答
2

如果您想结束您需要调用对象的过程 - 请Quit参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14% 29.aspxApplication

于 2011-08-15T20:18:15.650 回答
0

我在想 close 只是处理在 word 中打开的文档。请记住,您可以使用 1 个应用程序打开超过 1 个 word 文档。您可能想尝试使用 dispose 方法,或查看单词对象退出/退出方法(不记得有一段时间了)。

于 2011-08-15T20:09:03.790 回答