내가하려는 것은 내 프로세스 내에서 창 (0123)에 붙잡고 기다리는 것입니다. (아무 것도 제어 할 수는 없지만).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);
}
}
나는 매우 디버깅 환경에서 아니지만, 나는 창은 대기 기간 동안 WM_TIMER
메시지를받는 사실에 있음을 MessageBox
, 아직 WaitOne
사용 확인했다 항상 반환하기 전에 전체 5000ms 제한 시간을 기다립니다.
어디서 잘못 생각하나요?
UI 스레드에서 실행 중입니까? – SLaks
@SLaks 예. 다른 스레드에서'WaitOne'을 호출해야합니까? 그렇다면, 왜 아직도이 상태에서도'MessageBox' 팝업이 나옵니까? – Rotem
'MessageBox'는 UI 메시지를 출력합니다. – SLaks