问题
I'm writing an application that needed a MSWord document parser.
I'm using Microsoft.Office.Interop.Word.Document to extract the texts from the documents, but even if i use doc.Close() the document, from taskManager i can see that winword.exe are not killed, and after parsing a couple dozens documents it eats up some much resources.
is close() the wrong method?
please help me and point me to the right direction on how to terminate these processes properly. =)
~~~update~~~
Thanks for all the help. I use the app.quit() and also ran a loop that checks for the process and problem solved! =)
回答1:
Are you calling Application.Quit , additionally since you're doing Interop it may be worthwhile to release the RCW wrapper.
So basically something like:
yourWordAppObject.Quit();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(yourWordAppObject);
Note some folks use: ReleaseComObject but there are some potential pitfalls
回答2:
You must quit the application instance using app.quit(). Document.close() will just close the document. I also suggest setting app.visible = true when you're done processing so your user can close it themselves if all else fails.
回答3:
If you want to end the process you need to call Quit
on the Application
object - see http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.applicationclass.quit%28v=office.14%29.aspx
回答4:
After performing the app.Quit(), you must do app = null; From my experiences, this will prevent leftover processes from hanging around. Just be sure to do the app.Quit() and app = null in your exception handler as well.
回答5:
I am thinking close just handles the document open inside word. Remember you can have more than 1 word document open with 1 application. You may want to try either a dispose method, or look at the word objects quit/exit methods (can't remember its been a while).
来源:https://stackoverflow.com/questions/7070124/c-sharp-msoffice-interop-word-will-not-kill-winword-exe