I have an application that uses MSWord automation to edit some documents, after they save and close word I need to grab the modified file and put it back on the repository, there is only one scenario where I can't get it to work and that is when the user makes changes to the file, selects to close word and selects yes to save the file
there are 2 events that I'm using: DocumentBeforeSave Quit
on the Quit event I'm trying to load the .docx file from disk but on this particular scenario I get an IOException because the file is still in use, somehow I need to wait until after the Quit event has been processed, which is when Word is actually closed and the file is no longer being used
right now I have it working using this
word.Visible = true; while (!wordDone) { //gets changed to true on the Quit event System.Threading.Thread.Sleep(100); } bool error = false; do { try { //need to load the contents of the modified file ls.Content = System.IO.File.ReadAllBytes(provider.GetFileName()); error = false; } catch (System.IO.IOException) { error = true; System.Threading.Thread.Sleep(200); } } while (error);
while this works it is very ugly, I need a way to fire an event after the Quit event has been handled, or block the current thread while word is still running, or get an event after the document has been saved, the bottom line is I need a clean way to load the file after it has been saved and word is closed. DocumentAfterSave would be awesome, but doesn't seem to exist.
I Also tried unhooking the Quit handler and calling word.Quit on the Quit handler, that made no difference
I'm also investigating the use of ManualResetEvent or related classes, so far it almost works, but I still need to pause after it has been signaled to make sure word is closed and the file is no longer in use