2015-02-24 101 views
0

我正在编写一个VSTO VB.NET应用程序,该应用程序使用诸如复制,粘贴,插入文本和页面等标准功能来控制Word文档,并且不需要其他线程。我在不同的时间收到以下错误:呼叫被被叫方拒绝。 (来自HRESULT的异常:0x80010001(RPC_E_CALL_REJECTED))。避免VSTO,Word自动化计时RPC_E_CALL_REJECTED错误

这似乎是Word的计时问题,因为它几乎随机地失败,但只在Word调用中失败。在调试器中,我可以点击继续并且代码恢复。

我见过很多关于此的评论,相关的似乎是关于COM IMessageFilter接口。但他们都忽略了一个重要的观点:我只想等待Word重新获得自由,然后继续。我不想用选项提示用户(例如使用RetryRejectedCall)。现在一个丑陋的工作是有意拖延,如Threading.Thread.Sleep(500),但这并不是解决方案,而且许多调用也是不切实际的。

处理此问题的正确方法是什么?

回答

0

很可能您正在使用辅助线程中的Word对象模型。 Office应用程序使用单线程单元模型。不建议从辅助线程使用任何对象模型。

另外你可能会发现similar forum thread有帮助。

+0

谢谢。我没有明确使用线程或后台工作。您的链接提到使用XML或暂停唤起的类。你有你喜欢的例子吗?我从来没有像这样使用过。 – ForEachLoop 2015-02-25 14:28:14

+0

不,我没有任何样品。 – 2015-02-25 14:33:26