Вызов функции один раз при нажатии клавишы

216
14 сентября 2018, 21:40

Есть такой код:

    int Switch5 = ProcessMemoryReaderApi.GetKeyState(0xA1);
    if ((Switch5 & 0x8000) != 0)
    {
        act = !act;
        if (act)
        Console.WriteLine("true");
        else Console.WriteLine("false");
    }

При нажатии клавиши SHIFT - программа заходит сюда. Но! Если его держать и не отпускать - bool act быстро изменяется с false на true. Как можно сделать так, чтобы при нажатии shift act была true, даже в том случае, если его держать постоянно? А при нажатии на shift ещё раз - переменная изменялась на false

Answer 1

Как насчет самой простой защиты

private volatile bool _IAmWorking;
public void KeyEventHandler(EventArgs event)
{
    if (_IAmWorking) return;
    _IAmWorking = true;
    ......
    _IAmWorking = false;
}

Для однопоточного варианта, вы можете отследить, когда кнопка была нажата и когда отжата

private bool _canRunLogic = true;
public void ShiftKeyDownEventHandler(EventArgs event)
{
    if (!_canRunLogic) return;
    _canRunLogic = false;
    ......    
}

public void ShiftKeyUPEventHandler(EventArgs event)
{   
    _canRunLogic = true;    
}
READ ALSO
Парсинг HTML страницы на Groovy

Парсинг HTML страницы на Groovy

Имеется такого рода вопрос, необходимо распарсить HTML страничку на GroovyНагуглил сторонние библиотеки, однако проблема заключается в том, что...

192
Стиль текста в TextSwitcher

Стиль текста в TextSwitcher

Имеется TextSwitcher, в котором я программно обновляю показываемый текстСтиль для этого текста я устанавливаю через styles

243
Owl-carousel 2. Как отобразить цифры в dots?

Owl-carousel 2. Как отобразить цифры в dots?

Как можно вместо точек слайдера, отображать цифры (те

605