【问题标题】:How can I avoid exceptions "app is busy" when working with MS Project via com interop?通过 com 互操作使用 MS Project 时,如何避免“应用程序繁忙”异常?
【发布时间】:2017-04-07 10:25:57
【问题描述】:

我们有一个应用程序可以向/从 MS Project 导出和导入数据。数据量可能很大 - 1000 多个任务。 但即使数据部分很小,我们也注意到了奇怪的项目行为——当您连续执行超过 1 个操作时,它可能会在您的脸上抛出“应用程序正忙”异常。例如。创建一个新任务,并读取其完成日期。 它甚至可以在您刚刚创建 Application 对象后将这个异常作为第一个操作抛出。含义:

var projectApp = new Application();
projectApp.Open(...);

在第二行,我们可以捕获这个异常,因为 Project 应用程序仍在加载。

我尝试添加 Thread.Sleep,但这不是一个好方法,因为某些操作比其他操作需要更多时间,并且不同计算机上操作所需的时间量不同(由于性能)。

所以问题是: 有没有办法检测到 Project 应用程序很忙,而不会一直出现这些不可预测的异常?

【问题讨论】:

  • Google "c# CoRegisterMessageFilter" 搜索结果。

标签: c# office-interop ms-project


【解决方案1】:

将 STA 应用于线程任务并使用通过 google 找到的 OleMessageFilter Register/Revoke 解决了问题!感谢 Hans Passant 的评论让我得到了这个答案!

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2017-04-28
    • 2012-12-21
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2015-08-03
    相关资源
    最近更新 更多