public static void UnregisterKeyReleased(int key, KeyReleasedEventHandler eventHandler) { if (keyReleased.ContainsKey(key)) { keyReleased[key] -= eventHandler; } }
private void ScanThreadMethod() { var prevKey = -1; while (_scanThreadActive) { var nbKey = 0; // Scans the matrix for (var i = 0; i < 4; i++) { for (var j = 0; j < 3; j++) { if (!ReadMatrix(i, j)) { continue; } // A key has been pressed var keyNum = (i * 3) + j + 1; nbKey += keyNum; if ((prevKey != keyNum) && (prevKey == -1)) // A key has been pressed and no other is currently pressed (avoids dealing with multiple keys at the same time) { prevKey = keyNum; KeyPressedEventHandler tempEvent = KeyPressed; tempEvent(this, new KeyPressedEventArgs(keyNum, KeytoChar(keyNum))); } break; } } if (nbKey == 0) // No key pressed in this pass { // Was there a key pressed before ? if (prevKey != -1) { KeyReleasedEventHandler tempEvent = KeyReleased; tempEvent(this, new KeyReleasedEventArgs(prevKey, KeytoChar(prevKey))); } prevKey = -1; } // Leave time for other processes Thread.Sleep(50); } }