【问题标题】:Word Interop: Event to catch close of WordWord Interop:关闭 Word 的事件
【发布时间】: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 对象吗?

标签: c# ms-word interop


【解决方案1】:

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

private void WordApplication_ApplQuit()
{

    wordGenerator.Dispose();
    wordGenerator = null;

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多