C# MS Word应用程序退出事件仅在Word 2007上第二次后触发
每当特定的MS Word应用程序实例退出时,我需要运行一些逻辑。我正在使用Microsoft.Office.Interop.Word来:C# MS Word应用程序退出事件仅在Word 2007上第二次后触发,c#,.net,winforms,ms-word,office-interop,C#,.net,Winforms,Ms Word,Office Interop,每当特定的MS Word应用程序实例退出时,我需要运行一些逻辑。我正在使用Microsoft.Office.Interop.Word来: 创建我的Word应用程序实例 打开文档 选择一些表单字段并更改其文本 使Word应用程序可见,以便用户进行交互 在用户交互之后,使用Microsoft.Office.Interop.Word.applicationEvents.quit事件处理程序捕获退出事件(当用户退出Word时) 我正在使用一台现代化的机器开发运行Office 365(Word 16)的应
Microsoft.Office.Interop.Word.applicationEvents.quit
事件处理程序捕获退出事件(当用户退出Word时)btn\u单击事件中运行
//实例化word应用程序
Microsoft.Office.Interop.Word.Application wordApp=null;
wordApp=新的Microsoft.Office.Interop.Word.Application();
//打开文件
Document wordDoc=wordApp.Documents.Open(WordDocumentPath);
//使用字典填写表单字段
foreach(字段值中的KeyValuePair字段值)
{
FormField FormField=wordDoc.FormFields[fieldValue.Key];
formField.Select();
formField.Result=fieldValue.Value;
}
//使Word用户界面可见并置于最前面
可见=true;
Activate();
激活();
//处理退出事件
ApplicationEvents4_事件wordEvents=wordApp;
wordEvents.Quit+=OnWordQuit;
在OnWordQuit()
方法中,我将运行一些逻辑,但现在我只使用一个消息框
//仅在我第二次单击按钮时在Word 2007上运行
私有void OnWordQuit()
{
MessageBox.Show(“OnWordQuit”);
}
我想问题在于,您正在将事件处理程序OnWordQuit
附加到仅存在于btn\u click
事件处理程序中的局部变量wordEvents
的Quit
属性
一旦btn\u单击事件处理程序完成,此变量就超出范围。在单词真正关闭之前很久,wordEvents.Quit
事件处理程序可能会转到garbadge,并且没有任何响应
尝试在表单类上声明ApplicationEvents4\u Event wordEvents
字段,并将事件处理程序分配给该字段。您的代码应按以下方式更改:
//ApplicationEvents4_Event wordEvents = wordApp;
this.wordEvents.Quit += OnWordQuit; // field or property ApplicationEvents4_Event wordEvents should be defined on the form class
通过这种方式,您将确保只要表单处于打开状态,OnWordQuit就会继续存在。事件的范围确实是问题所在。不知何故,在Office2007的背景下,该活动第一次被收集,但第二次被保存。后续问题:我仍然在btn\u click
handler中声明所有COM对象(word应用程序和文档)。我只在捕捉到异常时才释放COM对象,因为我相信用户自己会退出应用程序,因为他可以访问UI。我是否应该在OnWordQuit中显式释放COM对象?或者它是多余的?在类似情况下的代码中,我不需要显式地处理COM对象。只要不再需要Word.Application
对象,我就会注意将所有对Word.Application
对象的引用都转换为null
,并信任垃圾收集器来完成其余的工作。虽然显式处理可能会更快地释放资源并获得一些性能增益。。。