.net - Excel 中的长时间运行操作

标签 .net vba excel excel-2010

我有一个 Excel 电子表格和一个 .Net 库,它可以执行一些相当复杂的计算。 .Net 程序集通过 COM 公开给 Excel 中的 VBA 代码。

当我调用 .Net 库时,Excel UI 线程在计算过程中被阻塞。

这会阻止用户与 Excel 交互,并且在某些情况下会向用户指示 Excel 的标题栏(未响应)。

我对 Excel 2010 中的 VBA 不太了解,但是有没有办法在不同的线程中生成对我的 .Net 库的调用并向用户显示“正在进行”对话框?

最佳答案

这是可能的,但可能需要一些努力才能将所有内容连接起来。您可以采用多种方法来解决此问题,其中一种可能类似于:

  • VBA 在 UI 线程上调用 C# COM 对象
  • C# COM 对象启动 BackgroundWorker运行计算。请注意,您无法从 BackgroundWorkerDoWork 事件处理程序访问 Excel 对象模型。如果您想在计算过程中更新 Excel,BackgroundWorker 应使用 ReportProgress 方法报告 UI 线程上的进度。
  • ProgressChanged 事件处理程序(在 UI 线程上运行)中,C# 代码可以直接更新 Excel 对象模型,也可以调用 VBA 代码来执行更新。
  • VBA 代码可以在BackgroundWorker 运行时显示进度对话框,以避免任何重入问题。

关于.net - Excel 中的长时间运行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365084/

相关文章:

vba - 将范围从 Excel 粘贴到 PowerPoint,同时保持格式设置

c# - 如何在 Web 应用程序中打开客户端系统上的 .exe 文件

c# - System.Net.Sockets - 定义超时? (C#)

excel - 尝试访问字典中的排序列表时出现类型不匹配错误

java - 如何使用 Apache POI 创建链接到长 url 的 Excel 超链接

vba - 用 Excel 和 VBA 在字符串中查找?

.net - Windows Service System.Timers.Timer无法启动

c# - 从最小化状态恢复后,表单具有最小尺寸

vba - 查找分配给主驱动器的字母

sql - 如何使用 MS Access 表单即时重写直通查询?