Запретить элемент управления WebBrowser глотать исключения - PullRequest
3 голосов
/ 20 августа 2008

Я использую System.Windows.Forms.WebBrowser, чтобы сделать просмотр а-ля Visual Studio Start Page. Тем не менее, кажется, что элемент управления ловит и обрабатывает все исключения, молча опуская их! Не нужно говорить, что это очень неудачное поведение.

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    throw new Exception("OMG!");
}

Приведенный выше код отменит навигацию и поглотит исключение.

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    try
    {
        e.Cancel = true;
        if (actions.ContainsKey(e.Url.ToString()))
        {
            actions[e.Url.ToString()].Invoke(e.Url, webBrowser.Document);
        }
    }
    catch (Exception exception)
    {
        MessageBox.Show(exception.ToString());
    }
}

Итак, то, что я делаю (выше), это перехват всех исключений и вставка окна, это лучше, чем тихая ошибка, но все же явно далека от идеала. Мне бы хотелось, чтобы оно перенаправляло исключение по обычному пути сбоя приложения, чтобы оно в конечном итоге стало необработанным или обработанным приложением из корня.

Есть ли способ сказать элементу управления WebBrowser, чтобы он прекратил сброс исключений и просто отправил их естественным и ожидаемым образом? Или есть какой-нибудь хакерский способ выбросить исключение через собственные границы?

Ответы [ 2 ]

1 голос
/ 20 августа 2008

Я не видел, чтобы браузер ел исключения, если вы не имеете в виду ошибки скрипта. Ошибки сценария можно разрешить с помощью свойства browser.ScriptErrorsSuppressed.

Если вы говорите о реальных исключениях, а не об ошибках скрипта, можете ли вы показать нам некоторый код, который воспроизводит проблему? Мы широко использовали браузер и не видели того, что вы описываете.

edit образца кода не было, когда я попросил образец кода

0 голосов
/ 29 сентября 2009

Моя лучшая ставка на то, почему это происходит, потому что есть граница, управляемая нативно-нативно, которую нужно пересечь. Нативная часть неправильно перенаправляет управляемые исключения, и мало что можно сделать.

Я все еще надеюсь на лучший ответ.

...