我想要做的是在我的進程內的窗口上捕獲並等待WM_TIMER
消息(儘管我無法控制這個消息)。在NativeWindow中等待消息
我正在嘗試使用AutoResetEvent
以等待消息。
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毫秒超時時間。
任何想法,我要去哪裏錯了?
是否在UI線程中運行? – SLaks
@SLaks是的。我應該從另一個線程調用'WaitOne'嗎?如果是這樣,爲什麼即使在這種狀態下,我仍然可以得到'MessageBox'彈出窗口? – Rotem
'MessageBox'泵用戶界面消息。 – SLaks