using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Events; namespace ShrlAlgoToolkit.Revit.Assists { /// /// UiApplication.PostCommand 结束事件监视器 /// /// /// RevitCommandEndedMonitor revitCommandEndedMonitor = new RevitCommandEndedMonitor(UiApplication); /// revitCommandEndedMonitor.CommandEnded += OnCommandEnded; /// var command = RevitCommandId.LookupPostableCommandId(PostableCommand.TypeProperties); /// UiApplication.PostCommand(command); /// internal class RevitCommandEndedMonitor { private readonly UIApplication _revitUiApplication; private bool _initializingCommandMonitor; public event EventHandler CommandEnded; public RevitCommandEndedMonitor(UIApplication revituiApplication) { _revitUiApplication = revituiApplication; _initializingCommandMonitor = true; _revitUiApplication.Idling += OnRevitUiApplicationIdling; } private void OnRevitUiApplicationIdling(object sender, IdlingEventArgs idlingEventArgs) { if (_initializingCommandMonitor) { _initializingCommandMonitor = false; return; } _revitUiApplication.Idling -= OnRevitUiApplicationIdling; OnCommandEnded(); } protected virtual void OnCommandEnded() { CommandEnded?.Invoke(this, EventArgs.Empty); } } }