Word Interop:捕捉Word关闭的事件

3

我的应用程序使用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和应用程序正在互相等待。
是否有其他事件可以使用? 我无法绕过警报并自动保存,因为用户可能不想保存。

你能获取Word的进程对象吗? - It'sNotALie.
1个回答

2
问题解决了...这次很简单。将dispose代码移到.Set()之上即可。
private void WordApplication_ApplQuit()
{

    wordGenerator.Dispose();
    wordGenerator = null;

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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接