2

いくつかの計算をキューに入れる 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) を呼び出すと、関数は期待どおりに動作します。

このようなことは可能ですか?

4

1 に答える 1

2

非計算スレッドから Excel C API (XlCall.Excel または任意の ExcelReference メソッド) を呼び出すことはできません。

Excel-DNA には、Excel のメイン スレッド call のマクロ コンテキストで実行する作業をキューに入れるためのヘルパーがありますExcelAsyncUtil.QueueAsMacro(...)

何をしようとしているのかは正確にはわかりませんが、非同期関数を実装しようとしている場合、これは正しいアプローチのようには思えません.... 1回限りの非同期関数またはReactive Extensions に基づくリアルタイム データ フィード

于 2013-04-09T15:24:38.390 に答える