C# Word AddIn BeforeClose 事件消失

C# Word AddIn BeforeClose Event disappear

大家好,这几天我一直在与 BeforeClose 事件作斗争。问题是当我打开更多文档时。例如: 我正在打开 4 个新文档,NewDocument 事件中的每个文档都将 BeforeClose 事件添加到文档中,就像这样:

var vstoDoc = Globals.Factory.GetVstoObject(this.Application.ActiveDocument);
vstoDoc.BeforeClose += new System.ComponentModel.CancelEventHandler(ThisDocument_BeforeClose);

现在我试图关闭它,所以我在 Doc2 之后关闭 Doc4,现在出现问题,因为 Doc1 仍然有 BeforeClose 事件,但 Doc3 没有。因此,如果我关闭从最后开始降序排列的文档,它就可以正常工作。但是如果我首先关闭例如 Doc1,其余的就没有 BeforeClose 事件。我不知道发生了什么。

我不确定它为什么会这样,但我从未在文档中看到您可以使用 GetVstoObject 将事件附加到文档。它可能与为每个文档重新使用相同的对象 (vstoDoc) 有关,而不是将每个文档分配给一个单独的对象。如果您创建了一个 class 来生成这些对象,然后将它们保存在一个集合中,它可能会工作得更好。然而

我的建议是使用可用于 VSTO 应用程序级外接程序的应用程序级 DocumentBeforeClose 事件。当加载项为 运行 时,这将自动触发所有关闭的文档。如果您想跟踪某些文件,请在创建 (NewDocument) 或打开 (DocumentOpen) 时向它们添加自定义文档 属性 或 DocumentVariable,您可以在触发 DocumentBeforeClose 时检查它们。