XlCall.Excel(XlCall.xlcCalculateNow)抛出一个XlCallException当事件从后

本文关键字:XlCall XlCallException 事件 一个 Excel xlcCalculateNow | 更新日期: 2023-09-27 18:08:19

我有一个ExcelFunction队列一些计算:

[ExcelFunction(...)]
public static void QueueCalcs(... takes ranges ...)
{
    var calcRequests = ... builds list of calc request parameters from ranges ...
    calcRequests.ForEach(QueueCalculation);
}
public static void QueueCalculation(calcRequestParameters)
{
    var bWorker = new BackgroundWorker();
    bWorker.DoWork += bWorkerDoWork;
    bWorker.RunWorkerCompleted += bWorkerRunWorkerCompleted;
    bWorker.RunWorkerAsnc(calcRequestParameters);
}
private static void bWorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    XlCall.Excel(XlCall.xlcCalculateNow);
}

工作线程成功完成,但是OnComplete委托抛出:

Exception of type 'ExcelDna.Integration.XlCallException' was thrown

如果我删除后台工作器并使用常规的foreach循环,然后调用XlCall.Excel(XlCall.xlcCalculateNow),该函数的行为如预期。

这样做是可能的吗?

XlCall.Excel(XlCall.xlcCalculateNow)抛出一个XlCallException当事件从后

你不能调用Excel C API (XlCall)。

从非计算线程获取Excel或任何ExcelReference方法。

Excel- dna有一个帮助器,可以让你在Excel主线程的宏上下文中排队工作-调用ExcelAsyncUtil.QueueAsMacro(...)

不太清楚你想做什么,但如果你想实现异步函数,这似乎不是正确的方法....有一些内置的支持一次性异步函数或基于响应式扩展的实时数据馈送。