C #: ShellWindows очень медленно - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь получить объект 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 (). Могу ли я установить ограничение по времени для процесса и, возможно, даже определить, какие окна сломаны и вызывают проблему, чтобы их можно было убить?

...