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);
}
}
}