У меня есть программа, где мне нужно получить экземпляр SHDocVw.InternetExplorer из работающего процесса IE8. Чтобы получить экземпляр, приведен пример кода ниже. По какой-то причине он не будет работать без Thread.Sleep.Я не хочу использовать Thread.Sleep с SHDocVw.ShellWindows
Browser.HWND вызывает InvalidCastException для всех экземпляров в m_IEFoundBrowsers, если Thread.Sleep удален. При использовании 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? Для начала нужно время. –
Вы думаете, что 'new ShellWindowsClass()' будет блокироваться, пока он не будет готов к использованию. –
Я сам вставляю IE, и у него достаточно времени для начала. Я попробую еще немного завтра, но похоже, что сон должен появиться после «нового ShellWindowsClass()». Я не так хорош в отношении эффектов отладчика VS, но при запуске кода там и в ожидании в точке останова я получаю ту же проблему, если у меня нет Thread.Sleep. Возможно, отладчик представляет что-то еще, но прямо сейчас мне кажется, что скрыть поток по какой-то причине - это единственное, что разрешает новый ShellWindowsClass(). –