MS Interop Word,Excel多个打开的文件DocumentBeforeClose处理

我有我的应用程序中的Windows资源pipe理器模块。 我想处理打开和closures单词和Excel模块中的文件。 当我同时打开fe 4-5文件时,closures处理程序无法正常工作。

问题是:有时在closuresWord应用程序后,我的应用程序不停止在wordDocEvents_DocumentBeforeClose函数的开始处的断点处。 似乎有一些相关的进程间通信,因为每个打开的文件都是一个新的进程。

如果是已知问题,请帮忙,否则我会尝试在我的代码中做一些事情。

代码快照:

if (_wordApp == null) { _wordApp = new Word.Application(); _wordDocEvents = (Word.ApplicationEvents4_Event)_wordApp; if (!isLocked) { //_wordDocEvents.Quit += new Word.ApplicationEvents4_QuitEventHandler(wordDocEvents_Quit); _wordDocEvents.DocumentBeforeClose += new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(wordDocEvents_DocumentBeforeClose); _wordDocEvents.DocumentBeforeSave += new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(wordDocEvents_DocumentBeforeSave); _wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone; } } _wordApp.Visible = true; Word.Document oDoc = _wordApp.Documents.Open(fileName, null, isLocked); oDoc.Activate(); _wordApp.Visible = true; _wordApp.Activate(); 

closures处理程序

 void wordDocEvents_DocumentBeforeClose(Word.Document doc, ref bool Cancel) { if (!doc.Saved) { MessageBoxResult res = MessageBox.Show(ApplicationValues.GetResourceString("library_file_save_changes"), "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Yes, System.Windows.MessageBoxOptions.DefaultDesktopOnly); switch (res) { case MessageBoxResult.Yes: doc.Save(); break; case MessageBoxResult.No: doc.Saved = true; break; default: Cancel = true; return; } } interopFileBeforeCloseHandler(doc.FullName, doc.ReadOnly); } 

这是一个更老的,但我find了这个线程后find了msdn: workbookbeforeclose-event-does-not-fire

所以一个相当简单的解决scheme是将所有创build/加载的文档存储到一个数组/列表/ …所以垃圾收集器不会处理它们,当它认为需要时,清除所有的事件处理程序。

为我工作就像一个魅力;)