public class ApplicationStateIndicator : IExternalEventHandler, IDisposable
{
private Timer timer;
private ExternalEvent externalEvent;
public bool IsBusy { get; private set; }
public event EventHandler StateChanged;
public void Initialize(TimeSpan interval)
{
externalEvent = ExternalEvent.Create(this);
externalEvent.Raise();
timer = new Timer(Callback, null, TimeSpan.Zero, interval);
}
public void Execute(UIApplication app)
{
}
public string GetName() => nameof(ApplicationStateIndicator);
private void Callback(object state)
{
var pendingState = externalEvent.IsPending;
if (pendingState != IsBusy)
StateChanged?.Invoke(this, EventArgs.Empty);
IsBusy = externalEvent.IsPending;
externalEvent.Raise();
}
public void Dispose() => timer.Dispose();
}