Я пытаюсь настроить хук мыши в фоновом потоке.
delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);
LowLevelMouseProc _proc = HookCallback;
SetWindowsHookEx(PInvoke.WH_MOUSE_LL, _proc, IntPtr.Zero, 0);
а также
IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam){/**/}
Если я помещу это в поток главного окна, все будет работать до тех пор, пока окну не придется выполнять более сложную работу, из-за которой мышь перестает отвечать на время этой работы (например, обновление нескольких дочерних элементов на панели).
Если я запускаю новый поток и оттуда устанавливаю хук, проблема заключается в том, что поток просто завершается после настройки хука, а функция обратного вызова никогда не вызывается.
Есть ли способ сохранить нить для этой цели? Или, если существует другой способ подключения мыши без риска зависания?
Я случайно заметил, что при выполнении рабочего потока
GetMessage(out msg, new IntPtr(0), 0, 0);
Никакое сообщение не получено, но поток поддерживается для требуемой цели. Также мне нужен элегантный способ закрыть поток, но GetMessage никогда не возвращается.
Я не совсем понимаю все эти сообщения, я просто хочу иметь возможность подключить мышь и защитить ее от зависания.
Любая помощь приветствуется.