실행중인 IE8 프로세스에서 SHDocVw.InternetExplorer 인스턴스를 얻어야하는 프로그램이 있습니다. 인스턴스를 얻으려면 아래 예제 코드가 실행됩니다. 어떤 이유로 Thread.Sleep 없이는 작동하지 않습니다.나는 SHDocVw.ShellWindows와 함께 Thread.Sleep을 사용하지 않을 것입니다.
Thread.Sleep가 제거되면 Browser.HWND가 m_IEFoundBrowsers의 모든 인스턴스에 대해 InvalidCastException을 발생시킵니다. Thread.Sleep을 사용하면 IE8 창에서 작동합니다.
누군가 Thread.Sleep을 사용하지 않는 방법으로이 작업을 수행하는 방법을 알고 있습니까?
예제 코드 (나는 ... 보통 그냥 미래에 문제를 밀어, 절전 기능을 사용하고 싶지 않다) :
InternetExplorer m_IEBrowser = null;
ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
Thread.Sleep(10);
foreach (InternetExplorer Browser in m_IEFoundBrowsers)
{
try
{
if (Browser.HWND == (int)m_Proc.MainWindowHandle)
{
m_IEBrowser = Browser;
break;
}
}
catch(InvalidCastException ice)
{
//Do nothing. Browser.HWND could not execute for this item.
}
}
무슨 일이되기 전에 어떻게됩니까? IE를 직접 시작 하시겠습니까? 시작하는 데 시간이 필요합니다. –
'새로운 ShellWindowsClass()'는 사용할 준비가 될 때까지 차단 될 것이라고 생각합니다. –
나는 IE 자신을 스트럿하고있어 시작할 시간이 충분하다. 나는 더 많은 것을 내일 시도 할 것이다. 그러나 잠이 "새로운 ShellWindowsClass()"다음에 오는 것처럼 그것은 생각된다. 나는 VS 디버거의 효과에별로 좋지 않다.하지만 거기에서 코드를 실행하고 중단 점에서 기다릴 때 Thread.Sleep을 가지지 않으면 같은 문제가 발생한다. 어쩌면 디버거가 다른 것을 소개하고 있지만, 지금 당장은 어떤 이유로 든 스레드를 잠자는 것이 새로운 ShellWindowsClass()를 끝내는 유일한 방법이라고 생각합니다. –