Я пытаюсь настроить мышиный крючок в фоновом потоке.
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 никогда не возвращается.
Я не совсем понимаю все эти сообщения, я просто хочу иметь возможность подключить мышь и обезопасить ее от замерзания.
Любая помощь ценится.