У меня есть приложение, которое использует MSWord для редактирования некоторых документов, после того, как они сохраняют и закрывают слово Мне нужно взять измененный файл и поместить его обратно в хранилище, там это только один сценарий, где я не могу заставить его работать, и это
когда пользователь вносит изменения в файл, выбирает закрыть слово и выбирает да, чтобы сохранить файл
есть 2 события, которые я использую:
DocumentBeforeSave
Выход
в событии Quit. Я пытаюсь загрузить файл .docx с диска, но в этом конкретном сценарии я получаю IOException, поскольку файл все еще используется, так или иначе, мне нужно подождать, пока обработается событие Quit, когда Word фактически закрывается, а файл больше не используется
сейчас у меня это работает, используя этот
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);
, хотя это работает, это очень уродливо, мне нужен способ вызвать событие после обработки события Quit, или заблокировать текущий поток, пока слово еще работает, или получить событие после сохранения документа, нижняя строка Мне нужен чистый способ загрузить файл после того, как он был сохранен и слово закрыто . DocumentAfterSave было бы здорово, но, кажется, не существует.
Я также попытался отцепить обработчик Quit и вызвать word.Quit в обработчике Quit, который не имел значения
Я также исследую использование ManualResetEvent или связанных с ним классов, пока он почти работает, но мне все еще нужно сделать паузу после того, как ему было сообщено, чтобы убедиться, что слово закрыто и файл больше не используется