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); /// public class RevitCommandEndedMonitor { private readonly UIApplication revitUiApplication; private bool initializingCommandMonitor; public event EventHandler CommandEnded; public RevitCommandEndedMonitor(UIApplication uIApplication) { revitUiApplication = uIApplication; 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); } } }