私がやろうとしているのはWM_TIMER
、プロセス内のウィンドウでメッセージをキャッチして待つことです(ただし、私が制御できないメッセージです)。
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ミリ秒のタイムアウト期間全体を待機しています。
私がどこで間違っているのか考えていますか?