我的应用程序使用Word互操作来实现“活动报告”功能。当从应用程序启动Word文档时,我们设置一个EventWaitHandle来暂停应用程序(创建“模态”效果),直到文档关闭:
wh.WaitOne();
我们已经在应用程序退出事件上设置了一个事件,然后我们设置了等待EventWaitHandle以便应用程序继续执行。
wordGenerator.WordApplication.ApplicationEvents2_Event_Quit += WordApplication_ApplQuit;
private void WordApplication_ApplQuit()
{
wh.Set(); // signal that word has closed
wordGenerator.Dispose();
wordGenerator = null;
}
此方法被调用后,应用程序将从存储位置读取文档并将其保存到我们的数据库中。一切都很好。 除非...用户更改文档而不是使用CTRL + S保存,而是单击关闭并收到“是否保存更改”提示。
在这种情况下,当您在Word中单击关闭时即触发退出事件,但是当保存更改的对话框出现时,Word仍然处于打开状态。 然后应用程序继续运行,并在尝试读取文档以保存到数据库时获得IO异常“文档正在被另一个进程使用”。 即使等待并重试也不起作用,因为Word和应用程序正在互相等待。
是否有其他事件可以使用? 我无法绕过警报并自动保存,因为用户可能不想保存。