在使用C#的消息处理机制时遇到了问题,自定义的WndProc函数在AddHook之后并不能马上收到消息。
private void MainWindow_SourceInitializaed(Object sender, EventArgs e)
{
IntPtr hwnd = new WindowInteropHelper(this).Handle;
HwndSource.FromHwnd(hwnd).AddHook(new HwndSourceHook(WndProc));
Func_SendMessage(); // 令外部程序给当前窗口发送消息,希望刚才绑定的WndProc能够处理
}
此时Func_SendMessage()中发出的消息并不能被WndProc处理。而如果在Func_SendMessage()之前sleep(1),则可以正常运行。
private void MainWindow_SourceInitializaed(Object sender, EventArgs e)
{
IntPtr hwnd = new WindowInteropHelper(this).Handle;
HwndSource.FromHwnd(hwnd).AddHook(new HwndSourceHook(WndProc));
System.Threading.Thread.Sleep(1); // sleep(1)
Func_SendMessage(); // 令外部程序给当前窗口发送消息,希望刚才绑定的WndProc能够处理
}
推测是HwndSource.AddHook(HwndSourceHook)调用了某个异步过程,需等其完成,才算真正执行完毕。
文章讨论了在C#中,自定义的WndProc函数在窗口初始化后立即添加HwndSource.Hook并未立即接收到消息的问题,推测可能是AddHook操作是异步的,需要等待其完成。解决方法是在发送消息前暂停一小段时间。
6930

被折叠的 条评论
为什么被折叠?



