0

我在 Project 2010 和 2013 中都复制了这个问题。

我使用 Visual Studio 2010 开发了一个 VSTO 插件。在这个插件中,我公开了一个 COMVisible 方法。

我还有一个不同的(非 .NET)应用程序,它会实例化 Project COM 对象,搜索我的插件并调用我标记为 COMVisible 的方法。

这会导致 Project 打开一个“新”项目文件并向其写入内容。

这个非 .NET 应用程序在调用我的插件中的 COM 方法后停止执行(不关闭 MS Project)。

然后我关闭新创建的项目(不是 MS 项目,只是文件)。一切都很好; 但是,当我尝试关闭 MS Project 时,它会无限期地挂起。在任务管理器中,它仍然显示为“正在运行”,单击 MS 项目窗口会弹出“切换到”、“重试”、“取消”对话框,通知我其他应用程序正忙...

令人惊讶的是,如果我选择不关闭新创建的项目文件,而只是关闭 MS Project 窗口,它会正常关闭。

这里可能发生了什么?

4

1 回答 1

0

好的,经过大量调查,我找到了问题的答案。基本上,从我的 VSTO 插件公开的 COM 类需要继承“StandardOleMarshalObject”。

这是因为我的插件中的 COM 方法正在访问辅助线程(调用应用程序的线程)上的项目对象模型。这是一个很大的不。派生自该类的编组所有调用该辅助线程到主 UI 线程,从而解决了问题。

于 2013-01-24T07:57:06.650 回答