我必须编写一个 C# API 来注册全局热键。为了接收 WM_HOTKEY 消息,我使用 aSystem.Windows.Forms.NativeWindow
并运行一个自己的消息循环System.Windows.Forms.Application.Run(ApplicationContext)
。当用户想要注册一个热键时,他必须运行一个名为的方法,该方法RegisterHotkey()
使用 停止消息循环System.Windows.Forms.ApplicationContext.ExitThread()
,使用 (P/Invoke) 函数注册热键并RegisterHotKey()
再次启动消息循环。这是必需的,因为RegisterHotKey()
必须在创建窗口的同一线程内调用,而该线程必须在运行消息循环的同一线程内再次实例化。
问题是,如果用户RegisterHotkey()
在启动正在运行消息循环的线程后不久调用该方法,则会在之前调用该方法,因此应用程序ApplicationContext.ExitThread()
会无限期地阻塞。Application.Run(ApplicationContext)
有人知道等待消息循环启动的方法吗?
提前致谢!