c# - MS Interop Word, Excel multiple opened files DocumentBeforeClose handling -
i have module windows explorer in app. want handle opening , closing word , excel files in module. when i'm opening f.e. 4-5 files @ same time, close handler doesn't work correctly.
the problem is: after closing word app, app not stopping on breakpoint @ beginning of worddocevents_documentbeforeclose function. seems related inter process communication, because every opened document new process.
if known issue please help, otherwise i'll try in codes.
code snapshot:
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();
close handler:
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); }
this older one, figured out after finding thread @ msdn: workbookbeforeclose-event-does-not-fire
so rather easy solution store created/loaded documents array/list/... garbage collector doesn't dispose them, when thinks needs so, clearing event handlers.
worked charm me ;)
Comments
Post a Comment