异步UDF和xleventCalculationCanceled

时间:2017-02-02 16:12:17

标签: xll

在我将异步函数写入单元格后按“Enter”后,异步函数被正确调用,Excel在计算结束时引发事件xleventCalculationEnded

但是,如果我在单击“Enter”后按下另一个单元格,则会引发事件xleventCalculationCanceled,然后再次调用异步函数!这种行为是否正常?我应该通过Excel12(xlAsyncReturn,...)为第一次异步调用,第二次异步调用还是两者都返回结果?

换句话说,xleventCalculationCanceled事件是否暗示我不强制将结果返回给Excel? (使用适当的asyncHandle

我正在使用异步函数在另一个线程中委派密集计算,并且在计算期间不阻止excel。但是,如果异步函数被自动调用两次(就像用户单击另一个单元格而不等待第一次调用完成的情况那样),那么对于相同的输入计算密集计算两次(因为第一次调用 - 取消通过excel-仍然生活在委托线程中......)你如何处理这个问题?

对同一个函数的两个调用 - 输入相同 - 是一个错误吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

您描述的是正常行为。当用户交互时,Excel取消然后重新启动异步计算(并且可以多次执行)。

documentation建议:

  1. xleventCalculationEnded会在xleventCalculationCanceled之后直接触发,

  2. 您可以在xleventCalculationEnded触发时释放计算期间分配的所有资源。我理解要包含您可能拥有的任何asyncHandle,因此您无需根据句柄返回任何结果。

  3. 如果长时间运行的功能允许在飞行中取消,您可以取消您的工作。否则,你可能会对正在进行的函数调用进行一些内部记录,并防止以这种方式自己完成两次工作。