Global KeyBoardHook отменяет регистрацию события KeyPress

У нас возникли проблемы с клавиатурой KeyPress событие. Он останавливается, когда событие нажатия клавиши заняло больше времени для завершения запроса. У нас есть поддержка KeyBoardHook который будет использовать для захвата глобальных событий клавиатуры. Это тот же класс, что упоминается в этом SO ответе.

Microsoft рекомендует, чтобы обратный вызов для перехвата клавиатуры был как можно более коротким, поскольку он фактически является частью обработчика прерываний. Если прерывание занимает слишком много времени, нарушающая часть цепочки обработчиков последовательно удаляется. Поскольку нам не сообщают, когда это происходит, нет способа обнаружить это. Обработчик клавиатуры просто перестает работать.

private IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam )
{
    if (nCode >= 0)
    {
        int vkCode = Marshal.ReadInt32(lParam);
        int keyAction = wParam.ToInt32();

        EventHandlerKey( keyAction, vkCode );
    }

    return CallNextHookEx(hookId, nCode, wParam, lParam);
}

private void EventHandlerKey(int keyAction, int keyCode)
{
    // Some process which taking long time..!
}

Любое предлагаемое решение для решения проблемы?

0 ответов

Другие вопросы по тегам