【发布时间】:2013-05-29 17:39:14
【问题描述】:
我的应用程序使用 Word 互操作来实现“主动报告”功能。当 Word 文档从应用程序启动时,我们设置一个 EventWaitHandle 来暂停应用程序(创建“模态”效果),直到文档关闭:
wh.WaitOne();
我们在 Application Quit 事件上设置了一个事件,然后我们在其中设置了等待 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 和应用程序似乎在互相等待。
还有其他我可以使用的事件吗?我无法绕过警报并自动保存,因为用户可能不想保存。
【问题讨论】:
-
你能得到 Word 的 Process 对象吗?