Events 此文档\u在与多个word文档一起保存之前

Events 此文档\u在与多个word文档一起保存之前,events,ms-word,save,vsto,handler,Events,Ms Word,Save,Vsto,Handler,我在保存到应用程序文档更改事件处理程序中的Word插件之前添加了一个文档: private void Application_DocumentChange() { Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument); vstoDocument.BeforeSave += T

我在保存到应用程序文档更改事件处理程序中的Word插件之前添加了一个文档:

    private void Application_DocumentChange()
    {
        Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
        vstoDocument.BeforeSave += ThisDocument_BeforeSave;
    }
我在文档更改中包含了Before save事件处理程序,希望它能应用于打开的每个word文档

当只有一个word文档处于打开状态时,这种方法非常有效。但是,当打开第二个文档,然后关闭第一个文档时,保存时不会触发该操作

但是,只要第一个文档保持打开状态,保存操作就会在所有其他文档上触发

基本上,事件处理程序似乎只应用于第一个打开的文档,并在该文档关闭时停止工作


干杯

您需要在全局声明源对象,以防止垃圾收集器(GC)对其进行扫描。当GC收集堆时,您的源对象可能会被销毁,并且您根本不会得到任何事件

Microsoft.Office.Tools.Word.Document vstoDocument = null;

private void Application_DocumentChange()
{
    vstoDocument = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
    vstoDocument.BeforeSave += ThisDocument_BeforeSave;
}

我知道你从哪里来,我已经试过了。这似乎没有多大帮助。关闭第一个文档后,仍不会触发保存事件。如果要为所有对象触发事件,则需要保留一个文档数组。现在您只需将第一个对象替换为另一个对象,但会触发多个事件(对于所有文档)。