public override void Update(TimeSpan elapsedTime) { if (keyStates.Keys.Count > 0) { foreach (var key in keyStates.Keys) { switch (keyStates[key]) { case TVButtonState.Pressed: case TVButtonState.Released: toRemove.Add(key); break; } } if (toRemove.Count > 0) { foreach (var key in toRemove) { if (keyStates[key] == TVButtonState.Pressed) { keyStates[key] = TVButtonState.Down; } else { keyStates.Remove(key); } } toRemove.Clear(); } } int keyCount = 0; InputEngine.GetKeyBuffer(keyBuffer, ref keyCount); for (int i = 0; i < keyCount; i++) { var keyData = keyBuffer[i]; var key = (CONST_TV_KEY)keyBuffer[i].Key; var state = keyData.Pressed == 1 ? TVButtonState.Pressed : keyData.Released == 1 ? TVButtonState.Released : TVButtonState.Up; keyStates.Remove(key); if (state != TVButtonState.Up) { keyStates.Add(key, state); } } }