Files
Shrlalgo.RvKits/ShrlAlgoToolkit.Revit/Assists/RevitCommandEndedMonitor.cs
2025-12-28 11:47:54 +08:00

51 lines
1.5 KiB
C#

using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Events;
namespace ShrlAlgoToolkit.Revit.Assists
{
/// <summary>
/// UiApplication.PostCommand 结束事件监视器
/// </summary>
///<example>
/// <c>RevitCommandEndedMonitor revitCommandEndedMonitor = new RevitCommandEndedMonitor(UiApplication);
/// revitCommandEndedMonitor.CommandEnded += OnCommandEnded;
/// var command = RevitCommandId.LookupPostableCommandId(PostableCommand.TypeProperties);
/// UiApplication.PostCommand(command);</c>
/// </example>
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);
}
}
}