2017-02-02 37 views
1

在我向單元中寫入異步函數後,按下「Enter」鍵後,異步函數被正確調用,Excel在計算完成時引發事件xleventCalculationEnded異步UDF和xleventCalculationCaledled

但是,如果我在點擊「Enter」後按下另一個單元格,事件xleventCalculationCanceled被引發,然後再次調用異步函數!這種行爲是否正常?我應該通過Excel12(xlAsyncReturn,...)爲第一次異步呼叫,第二次異步呼叫還是兩者返回結果?

換句話說,xleventCalculationCanceled事件意味着我不是被迫將結果返回給Excel? (使用適當的asyncHandle

我使用異步函數委託另一個線程中的密集計算,並在計算過程中不阻止excel。但是,如果異步函數被自動調用兩次(就像用戶單擊另一個單元而不等待第一次調用完成時那樣),那麼對同一輸入計算兩次密集計算(因爲第一次調用 - 取消通過excel-仍然住在委託線程中......)你如何處理這個問題?

兩次調用相同的函數 - 具有相同的輸入 - 是一個錯誤?

非常感謝

回答

1

你描述的是正常的行爲。當用戶交互時(並且可以多次執行),Excel會取消並重新開始異步計算。

documentation建議:

  1. xleventCalculationEndedxleventCalculationCanceled後直接火了,

  2. 可以釋放計算時xleventCalculationEnded火災中分配的任何資源。我明白,包括任何你可能擁有的asyncHandle,因此你不需要根據句柄返回任何結果。

如果您的長時間運行功能允許在飛行中取消,您可以取消您所做的工作。否則,你可能需要做一些關於哪些函數調用正在進行的內部簿記,並且阻止你以這種方式進行兩次這樣的工作。