0
我使用ExcelAsyncUtil.Run異步運行ArrayFormula。這個公式有大約20列和1000-5000行。異步ArrayFormula仍然凍結Excel
它仍然凍結我的Excel,我認爲這是ExcelDNA轉換/呈現我的「等待消息」。我如何重構這個更好的工作?
這是一些示例代碼。
[ExcelFunction(
Name = "MySlowFunction",
Description = "...",
IsHidden = false)]
public static object MySlowFunction(DateTime reportDate, object[,] filters)
{
var result = ExcelAsyncUtil.Run("MySlowFunction",
new object[] { reportDate, filters },
() =>
{
try
{
return // Run slow query to server here....
}
catch (Exception asyncError)
{
return new object[,] { { asyncError.Message } };
}
});
return ParseResult(result);
}
public static object ParseResult(object result)
{
if (result.Equals(ExcelError.ExcelErrorNA))
{
return "Wait...";
}
else
{
return result;
}
}
謝謝Govert。這是我用來實現這一點的方式。我有點擔心內存泄漏。如果調用異步函數的單元格被更改,您是否知道清除字典的簡單方法? – Samuel
而不是使用ExcelAsyncUtil.Run,使用ExcelAsyncUtil.Observe與IObservable,那麼Dispose將可靠地讓您清理。以此加載項爲例:https://github.com/ratesquant/ACQ/tree/master/ACQ.Excel/Handles – Govert