Сведения о вопросе

profi

20:05, 14th August, 2020

Запретить проглатывание исключений элементом управления WebBrowser

Просмотров: 411   Ответов: 2

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

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 , чтобы остановить потопление исключений и просто переслать их естественным и ожидаемым способом? Или есть какой-то хакерский способ бросить исключение через родные границы?



  Сведения об ответе

ЯЯ__4

22:52, 26th August, 2020

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

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

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


  Сведения об ответе

piter

04:37, 13th August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться