【发布时间】:2018-09-03 22:40:25
【问题描述】:
我正在使用 Excel 和 C# VSTO 中的多线程。当我使用辅助线程写入 Excel 工作表并且我作为 Excel 用户在写入过程中与 Excel 交互时,我得到 p>
来自 HRESULT 的异常:0x800AC472。
如果我不执行此交互,则写入成功。
因此,我相信如果我可以在写入操作进行时完全阻止或锁定用户与 Excel 交互,我将不会再收到此错误消息。我已经尝试设置sheet.EnableSelection = Microsoft.Office.Interop.Excel.XlEnableSelection.xlNoSelection 以禁用用户进行选择的能力,然后在写入完成后启用它,但是这不会阻止所有交互并且上述错误仍然会弹出。是的,Office 应用程序中的多线程很复杂,有些人甚至会说不推荐,但here 我们看到我的技术是 MSDN 论坛中建议的技术:Its not advisable to try to interact with the Excel object model in a multi-threaded way (except by using locks to force single-threaded access).
在没有多线程的情况下对 VSTO 执行操作时,Excel 自然会暂时锁定。我想在我的程序中认为有必要时触发该行为,如本场景所示。
【问题讨论】:
-
老实说,我不熟悉使用 VS+C#,但这听起来像 XY Problem... 一个尝试解决另一个问题的变通方法的问题。必须有更好的方法来防止这个错误发生在简单的用户交互中......
-
看看这个:social.msdn.microsoft.com/Forums/vstudio/en-US/…,关于这个问题有一些扎实的讨论。
-
已确定 Excel 中的多线程处理很复杂,只有一些变通方法可行。就我而言,此解决方法是锁定 Excel 与用户交互。我问的是如何做到这一点。所以我认为我的问题很简单,当然也不是 XY 问题。
-
感谢您的文章。虽然我不确定阅读后是否会感到更加困惑,但我认为有些想法可以应用到我的项目中。但是,我暂时阻止用户的想法似乎是一个合理的选择,这里没有讨论,当然也不能回答这篇文章的主要问题。
-
当您不使用单独的线程时,Excel 通常会阻塞,因此答案取决于您首先这样做的原因。可能显示进度条?可能还有其他方法可以做任何事情。
标签: c# excel multithreading vsto