【发布时间】:2017-02-28 11:22:32
【问题描述】:
我为 Microsoft Word 构建了一个插件。当用户单击一个按钮时,它会运行许多将 Microsoft Word 文档列表导出到过滤 HTML 的进程。这很好用。
代码失败的地方在于处理大量文件。文件转换完成并调用下一个函数后,应用程序崩溃,我从 Visual Studio 获取此信息:
托管调试助手“DisconnectedContext”在“C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE”中检测到问题。
附加信息:转换为 COM 上下文 0x56255b88 此 RuntimeCallableWrapper 失败并出现以下错误:系统 通话失败。 (来自 HRESULT 的异常:0x80010100 (RPC_E_SYS_CALL_FAILED))。这通常是因为 COM 上下文 创建此 RuntimeCallableWrapper 的 0x56255b88 已被 断开连接或忙于做其他事情。释放 来自当前 COM 上下文(COM 上下文 0x56255cb0)的接口。这 可能导致损坏或数据丢失。为避免此问题,请 确保所有 COM 上下文/单元/线程保持活动状态并且 可用于上下文转换,直到应用程序完全 使用代表 COM 组件的 RuntimeCallableWrappers 完成 住在他们里面。
经过一些测试,我意识到如果我在文件转换后简单地删除所有代码,就没有问题。为了解决这个问题,我将其余代码放在另一个按钮中。
问题是我不想给用户两个按钮。在阅读了各种其他线程之后,听起来我的代码有内存或线程问题。我正在阅读的答案并不能帮助我真正理解下一步该做什么。
我觉得这就是我想做的:
1- 运行转换。 2-关闭转换中的线程/清理内存问题。 3- 继续运行代码。
不幸的是,我真的不知道如何做#2,甚至是否可能。非常感谢您的帮助。
【问题讨论】:
标签: c# multithreading visual-studio com