private void RunPendingEvents() { while (_pendingEvents.Count > 0) { IUXEvent nextEventToRun = _pendingEvents[0]; if (nextEventToRun.CanRun(_runningEvents)) { // Move event from pending to running _pendingEvents.RemoveAt(0); _runningEvents.Add(nextEventToRun); // Subscribe to completion event nextEventToRun.Completed += UXEvent_OnCompleted; // Fire off our own event EventCommenced?.Invoke(nextEventToRun); // Run event nextEventToRun.Run(); continue; } break; } }
private void UXEvent_OnCompleted(IUXEvent uxEvent) { // Remove from currently running list _runningEvents.Remove(uxEvent); // Unsubscribe from event uxEvent.Completed -= UXEvent_OnCompleted; // Fire off our own event EventCompleted?.Invoke(uxEvent); }
public void AddEvent(IUXEvent uxEvent) { if (uxEvent != null) { // Add event to our pending queue _pendingEvents.Add(uxEvent); // Fire off our own event EventEnqueued?.Invoke(uxEvent); } }