在使用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)调用了某个异步过程,需等其完成,才算真正执行完毕。