Revit二次開發,無限選點操作後,當按下Esc鍵取消無限循環時,如何讓已經發生的作業保持完成?
這其實是Revit的事務接受問題,只要想辦法確保當按下Esc鍵時,讓他提交事務即可。
我們知道,在執行IExternalCommand的指令過程中,如果你按下Esc鍵的話,正常情況下會產生下面的提示框:
該提示框的意思是說,用戶取消了選點操作。
當Revit彈出這個對話框的時候 ,已經發生的操作,由於事務終止的原因,將全部還原。
產生這個對話框的原因,是因為發生了以下的異常:
但有時候,我們在項目的實際運用中,由於不知道用戶到底要選幾個點,當然強制用戶使用確定的選點數量也是可以的。但我們希望更好的處理這一需求,即用戶可以無限選點,每次選點,都執行用戶希望的操作,最後當用戶不想選了後,按下Esc鍵,就可以取消無限選點,結束選點操作,同時用戶當然希望結束的時候 ,已經執行的操作能夠生效保留下來。
默認情況下,Revit在用戶按Esc鍵的時候 ,將回滾事務,取消之前用戶的所有選點操作。這就麻煩了。
下面提供一種方式,變相的允許在用戶按下Esc鍵之後,以前發生的操作保持生效,他的原理是變相的處理OperationCanceledException異常,如下所示:
<code>try { this.Run(); tran.Commit(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) { if (Runtime.IsCommitIfOperationCanceledException) { tran.Commit(); Runtime.IsCommitIfOperationCanceledException = false; return Result.Succeeded; } message = ex.Message; return Result.Failed; } catch (Exception) { tran.RollBack(); return Result.Failed; } finally { tran.Dispose(); }/<code>
處理Autodesk.Revit.Exceptions.OperationCanceledException異常,回滾標記即可。
源碼下載:
https://download.csdn.net/download/mazhiyuan1981/12882047