2012-06-08 33 views
3

我正在使用Microsoft.Office.Interop.Word.ApplicationClass来读取一组Word文档。我能够很好地阅读它们,但是我注意到用于阅读这些文档的过程从未实际上根据Windows任务管理器结束。Word Application Class问题

从我已经Google'd,似乎没有任何人有这个问题,这导致我相信我要么做根本错误的事情,要么我缺乏有效解释我的问题的能力用于Google搜索。

我相对较新的C#,所以我怀疑前者。在下面查找我用来创建文档'reader'实例的代码。

private void readDoc(string docPath) 
{ 
    Word.ApplicationClass wordApp = new Word.ApplicationClass(); 
    object nullObj = System.Reflection.Missing.Value; 
    object roObj = true; 
    object objFile = docPath; 

    try 
    { 
     Word.Document doc = wordApp.Documents.Open(ref objFile, 
      ref nullObj, ref roObj, ref nullObj, ref nullObj, ref nullObj, 
      ref nullObj, ref nullObj, ref nullObj, ref nullObj, ref nullObj, 
      ref nullObj, ref nullObj, ref nullObj, ref nullObj, ref nullObj); 
     doc.ActiveWindow.Selection.WholeStory(); 
     doc.ActiveWindow.Selection.Copy(); 
     IDataObject tmpData = Clipboard.GetDataObject(); 
     string docText = tmpData.GetData(DataFormats.Text).ToString(); 

      (...) 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Data); 
    } 
} 

的try块涉及字符串docText,不涉及wordAppdoc休息,因此我还没有在代码段包括它。

对于Word.ApplicationClass似乎没有.Dispose()函数,所以我在这里有点遗憾。

编辑对不起,这里隐含的问题是:如何以编程方式结束该过程?

回答

3

尝试添加以下在readDoc()的末尾:

wordApp.Quit(ref nullObj, ref nullObj, ref nullObj);

+0

这似乎工作。谢谢。 –

4

你应该在你的代码中使用Word.Application类,而不是Word.ApplicationClass

Word.Application wordApp = new Word.Application(); 

你需要明确关闭您的文档和Word应用程序时,你就大功告成了:

doc.Close(); 
wordApp.Quit(); 
+0

我会给你一个镜头。谢谢。 –

+0

我正在使用'WordApp.Quit();'它正在关闭应用程序... 但是当我点击开启** Word **在任务中裸!我的形式是** TopMost **这是否与此有关,以及如何解决这个问题......? –

2

这是一个常见问题,并在this KB article中描述。

+0

有趣。但是,根据文章的最后部分,这个问题似乎只适用于2002和2003版本的.NET。 无论哪种方式,感谢您回复此链接。我会赞成,但我缺乏'声誉点'来这样做。 –

+0

@Riequa,该问题仍然适用于更新版本的.NET。关于这个主题有很多StackOverflow问题,例如下面的问题(关于Excel,但问题对于任何Office应用程序都是一样的):http://stackoverflow.com/questions/5189379/how-to-end-excel- EXE进程 – Joe