private void TimerThreadStart() { var stopwatch = new Stopwatch(); while (true) { stopwatch.Restart(); if (!TrySendOldest(_controlChangeMessages.Values, msg => ControlChange?.Invoke(msg))) { TrySendOldest(_nrpnMessages.Values, msg => Nrpn?.Invoke(msg)); } // Sleep var remainingTicks = (int)(UpdateInterval - stopwatch.ElapsedMilliseconds); if (_stopTimerEvent.WaitOne(Math.Max(0, remainingTicks))) { break; } } }
private void HandleControlChange(MidiController controller, int controllerValue) { ControlChange?.Invoke(controller, controllerValue); }