我必須編寫一個用於註冊全局熱鍵的C#API。要接收WM_HOTKEY消息,我使用System.Windows.Forms.NativeWindow
並與System.Windows.Forms.Application.Run(ApplicationContext)
一起運行自己的消息循環。當用戶想要註冊一個熱鍵時,他必須運行一個名爲RegisterHotkey()
的方法,該方法用System.Windows.Forms.ApplicationContext.ExitThread()
停止消息循環,用RegisterHotKey()
(P/Invoke)函數註冊熱鍵並再次啓動消息循環。這是必需的,因爲RegisterHotKey()
必須在創建窗口的同一個線程中調用,而這個線程必須在運行消息循環的同一個線程中實例化。C# - 等待WinForms消息循環
問題是,如果用戶在啓動正在運行消息循環的線程後立即調用RegisterHotkey()
方法,ApplicationContext.ExitThread()
在Application.Run(ApplicationContext)
之前被調用,因此應用程序將無限期地阻塞。有沒有人知道等待消息循環開始的方法?
在此先感謝!
這沒有什麼意義。只需在啓動消息循環之前調用RegisterHotkey()*即可。而且,真正的窗口是必需的,你必須有一個有效的句柄。 –
由於我不想爲每個熱鍵啓動一個消息循環,我必須停止並重新啓動現有的以在同一個線程中調用RegisterHotKey()。由於我的代碼工作,我不認爲我需要一個真正的窗口,有效的句柄是由'NativeWindow.CreateHandle(CreateParams)'創建的。 –