C# 当来自backgroundworker的事件发生时,XlCall.Excel(XlCall.xlcCalculateNow)抛出一个XlCallException

C# 当来自backgroundworker的事件发生时,XlCall.Excel(XlCall.xlcCalculateNow)抛出一个XlCallException,c#,excel-dna,C#,Excel Dna,我有一个EXCEL函数,用于将一些计算排队: [ExcelFunction(...)] public static void QueueCalcs(... takes ranges ...) { var calcRequests = ... builds list of calc request parameters from ranges ... calcRequests.ForEach(QueueCalculation); } public static void Queu

我有一个EXCEL函数,用于将一些计算排队:

[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),则函数的行为与预期的一样


这样做可能吗?

您不能从非计算线程调用Excel C API(XlCall.Excel或任何Excel引用方法)

Excel DNA有一个助手,可以让您将工作排队,以便在Excel主线程上的宏上下文中运行-调用
ExcelAsyncUtil.QueueAsMacro(…)


现在还不清楚您想要做什么,但是如果您想要实现异步函数,这似乎不是正确的方法。。。。对or有一些内置支持。

ExcelAsyncUtil.QueueAsMacro(…)工作正常。在过去的几个小时里,我一直在尝试使用RDT服务器或RxExtensions,但缺乏示例阻碍了任何工作。基本上,我想查询一些Web服务进行计算,将响应缓存在外接程序中,并通过excel函数提供对缓存响应属性的访问。有没有一个可行的例子可以指导我呢?也许你可以试试这个例子:然后把后续问题发到谷歌的小组。我觉得错过了那个帖子有点傻。谢谢,我来看看。