我正在尝试做的是WM_TIMER
在我的进程中的窗口上捕获并等待消息(尽管我无法控制)。
我正在尝试使用 anAutoResetEvent
来等待消息。
该WaitForMaterialUpdate
方法将 连接NativeWindow
到窗口,并阻塞直到收到消息。
这是我正在使用的代码:
public class MaterialEditorWindow : NativeWindow
{
private const int WM_TIMER = 0x0113;
private AutoResetEvent waiter;
public void WaitForMaterialUpdate(IntPtr handle)
{
waiter = new AutoResetEvent(false);
AssignHandle(handle);
waiter.WaitOne(5000);
ReleaseHandle();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_TIMER) waiter.Set();
base.WndProc(ref m);
}
}
我不是在一个非常可调试的环境中,但我已经确认使用MessageBox
该窗口实际上WM_TIMER
在等待期间接收消息,但WaitOne
总是在返回之前等待完整的 5000 毫秒超时时间。
知道我哪里出错了吗?