2012-04-11 2 views
0

MainWindowHandle에 대한 몇 가지 스레드를 읽었지만 내 문제에 대한 해결책을 찾지 못했습니다. GUI 응용 프로그램을 시작하고 프로세스 객체를 통해 MainWindowHandle을 가져 오려고하지만 핸들 값은 항상 0입니다. gui가로드 될 때까지 thread.sleep()을 기다리지 않을 것입니다. 나는 또한 WaitForInputIdle을 사용하려고 시도했으나 전혀 도움이되지 않았다.C# MainWindowHandle always zero

process.Start(); 

process.WaitForInputIdle(1000); 
while (process.MainWindowHandle == IntPtr.Zero) 
{ 
    Thread.Sleep(100); 
} 
// do something with the handle 

그가 보통의 thread.sleep으로 waitforinputidle을 바꾸는 동안 그는 절대로 떠나지 않습니다. 그는 핸들을 올바르게 가져옵니다. = 제로 난 단지 내가 핸들을 얻는 경우에 내 코드를 계속하려는하지만 난 MainWindowHandle에 저장된 값이 캐시이

답변

5

에 대한 정적 시간을 기다려야 돼요!

은 단순히 단어에 넣어합니다. 루프 내에서 process.Refresh()를 추가하여 해당 값을 무효화하십시오.

while (process.MainWindowHandle == IntPtr.Zero) 
{ 
    Thread.Sleep(100); 
    process.Refresh(); 
} 
+1

thats 솔루션, 감사합니다. 그러나 waitforinputidle이 노는 것은 어떻게 역할을합니까? msdn 읽기 : http://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowhandle.aspx 그것은 핸들이 "준비가 안된다"는 문제에 도움이됩니다. – dontcare

+0

@dontcare, 완전히 아닙니다. WaitInputIdle()이 실제로 얼마나 효과적인지 알 수 있습니다. 이 메서드에 대한 문서에서 알 수있는 것만 제외하면 자식이 유휴 상태가 될 때까지 차단됩니다. 이것은 유휴 상태라는 것은 자식이'MainWindowHandle'을 가지고 있다는 것을 의미하지만,이 방법으로 본래의 만남에서 볼 수 있듯이 이것은 완전히 정확하지는 않다. – Tung