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