Ошибка зацикливания на ShellWindows
Иногда я получаю сообщение "Ошибка HRESULT E_FAIL возвращена при вызове компонента COM". ошибка при зацикливании класса ShellWindows. Кажется, это происходит в основном после того, как компьютер просыпается от сна. Я должен перезагрузить компьютер, чтобы очистить эту ошибку, которая не является хорошей.
Ошибка происходит в строке цикла "foreach" в следующем коде:
log.Debug(String.Format("new ShellWindowsClass"));
ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
log.Debug(String.Format("Loop begin"));
foreach (InternetExplorer Browser in m_IEFoundBrowsers)
{
log.Debug(String.Format("Browser {0} ?= {1}", Browser.HWND, pid));
if (Browser.HWND == pid)
{
found = Browser;
break;
}
}
log.Debug(String.Format("Loop end"));
Я компилирую для Dot Net Framework 3.0.
Любые предложения по устранению этой ошибки, кроме перезагрузки компьютера?
1 ответ
Из этой темы я нашел решение. Проблема не в начале цикла, а в первом операторе журнала отладки. Эта строка кода - то, что терпит неудачу.
log.Debug(String.Format("Browser {0} ?= {1}", Browser.HWND, pid));
и это терпит неудачу, потому что Browser.HWND
это то, что бросает исключение.
Решение состоит в том, чтобы изучить Browser
переменной и проверьте его имя процесса. Получите имя процесса следующим образом:
string processName
= System.IO.Path.GetFileNameWithoutExtension(Browser.FullName).ToLower();
Делая это, я обычно видел значение для processName
быть либо:
"iexplore"
"explorer"
когда processName="explorer"
Призыв к Browser.HWND
вызывает "Ошибка HRESULT E_FAIL была возвращена от вызова к компоненту COM". ошибка.
Чтобы предотвратить ошибку, добавьте оператор if:
if (processName.Equals("iexplore")) { . . . }
И действовать только в том случае, если это утверждение верно.