Я пытаюсь получить объект InternetExplorer, соответствующий дескриптору Windows HWND.
public static InternetExplorer GetIEFromHwnd(int hwnd)
{
SHDocVw.ShellWindows shellWindows = new ShellWindows();
foreach (InternetExplorer ie in shellWindows)
{
LogWriter.LogWrite(ie.HWND + " : " + hwnd);
if (ie.HWND == hwnd)
{
return ie;
}
}
return null;
}
Код, похоже, работал без проблем. Но теперь я иногда вижу, что foreach занимает минуты. В отладчике я могу сделать «Разбить все» и увидеть, что он расположен на линии foreach.
Что может сделать это настолько медленным и как это можно исправить?
РЕДАКТИРОВАТЬ ----------------------------------------------- Я нашел проблему. Во время моего цикла отладки запуска скрытого IE, а затем определения окна, я должен был создать несколько оконных процессов IE зомби. В результате очистки процессов IE с помощью диспетчера задач все снова заработало.
Теперь все еще остается вопрос: существует ли обходной путь при зависании перечисления ShellWindows (). Могу ли я установить ограничение по времени для процесса и, возможно, даже определить, какие окна сломаны и вызывают проблему, чтобы их можно было убить?