gpt4 book ai didi

C#VSTO : How to block a user from interacting with client (Excel) for a brief period?

转载 作者:行者123 更新时间:2023-11-30 22:59:30 24 4
gpt4 key购买 nike

我在 Excel 和 C# VSTO 中使用多线程。当我使用辅助线程写入 Excel 工作表时,作为 Excel 用户,在写入过程中与 Excel 交互时,我得到

Exception from 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自然会暂时锁定。当我觉得在我的程序中有必要时,我想触发该行为,如本场景所示。

最佳答案

您的用例似乎很合理,所以我认为您可以通过以下方式解决它。

  1. 你也许可以逃脱 this但我真的不知道它有多坚固。那个问题的提问者说这对他不起作用。我不知道为什么会这样;也许他实现错误,或者它有未说明的局限性。

  2. 不是立即进行更改,而是向任务/操作 Pane 添加一个按钮,在计算完成后启用它,并在单击它时修改电子表格。 This is a documented approach .

  3. 完全屏蔽 UI,并可能添加进度条。对于需要几秒/分钟的事情,我经常这样做,只要您一次只从一个线程访问 API,它就可以正常工作。 This是我使用的进度条(有一些小的修改)。

关于C#VSTO : How to block a user from interacting with client (Excel) for a brief period?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com