C#Word AddIn BeforeClose事件消失

本文关键字:消失 事件 BeforeClose AddIn C#Word | 更新日期: 2023-09-27 18:22:48

你好,几天来我一直在与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事件。我不知道发生了什么。

C#Word AddIn BeforeClose事件消失

我不知道它为什么会这样做,但我从未在文档中看到过可以使用GetVstoObject将事件附加到文档中。它可能需要为每个文档重新使用相同的对象(vstoDoc),而不是将每个对象分配给一个单独的对象。如果创建一个类来生成这些对象,然后将它们保存在集合中,效果可能会更好。然而

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