Word Interop:关闭Word的事件

时间:2013-05-29 17:39:15

标签: c# ms-word interop

我的应用程序使用Word interop进行“主动报告”功能。从应用程序启动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中单击“关闭”,就会触发quit事件,但Word仍处于打开状态,而保存更改的对话框就在那里。然后,当尝试读取文档以保存到数据库时,应用程序继续运行并获取IO异常“文档正由另一个进程使用”。即使等待和重试也不起作用,因为Word和应用程序似乎在相互等待。

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

1 个答案:

答案 0 :(得分:1)

问题解决了......这次很容易。将处置代码移到.Set()。

之上
private void WordApplication_ApplQuit()
{

    wordGenerator.Dispose();
    wordGenerator = null;

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

}