2

我的应用程序将 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 和应用程序似乎在互相等待。

我可以使用其他活动吗?我无法绕过警报并自动保存,因为用户可能不想保存。

4

1 回答 1

1

问题解决了……这次很简单。将处置代码移到 .Set() 上方。

private void WordApplication_ApplQuit()
{

    wordGenerator.Dispose();
    wordGenerator = null;

    wh.Set(); // signal that word has closed

}
于 2013-05-29T18:14:23.623 回答