通过 com interop 使用 MS Project 时如何避免异常 "app is busy"?

How can I avoid exceptions "app is busy" when working with MS Project via com interop?

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

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

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

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

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

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