我的应用程序使用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和应用程序似乎在相互等待。
我还可以使用其他活动吗?我无法绕过警报并自动保存,因为用户可能不想保存。
答案 0 :(得分:1)
问题解决了......这次很容易。将处置代码移到.Set()。
之上private void WordApplication_ApplQuit()
{
wordGenerator.Dispose();
wordGenerator = null;
wh.Set(); // signal that word has closed
}