Impedir que o controle do WebBrowser engula exceções
-
09-06-2019 - |
Pergunta
estou usando o System.Windows.Forms.WebBrowser
, para fazer uma visualização como a página inicial do Visual Studio.No entanto, parece que o controle está capturando e tratando todas as exceções, afundando-as silenciosamente!Não há necessidade de dizer que este é um comportamento muito infeliz.
void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
// WebBrowser.Navigating event handler
throw new Exception("OMG!");
}
O código acima cancelará a navegação e engolirá a exceção.
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());
}
}
Então, o que eu faço (acima) é capturar todas as exceções e abrir uma caixa, isso é melhor do que falhar silenciosamente, mas ainda está claramente longe do ideal.Gostaria que ela redirecionasse a exceção através do caminho normal de falha do aplicativo, para que ela não fosse tratada ou fosse tratada pelo aplicativo a partir da raiz.
Existe alguma maneira de dizer ao WebBrowser
controle para parar de afundar as exceções e apenas encaminhá-las da maneira natural e esperada?Ou existe alguma maneira hackeada de lançar uma exceção através dos limites nativos?
Solução 2
Minha melhor aposta por que isso acontece é porque há um limite nativo-gerenciado-nativo a ser cruzado.A parte nativa não encaminha corretamente as exceções gerenciadas e não há muito que possa ser feito.
Ainda estou esperando uma resposta melhor.
Outras dicas
Não vi o navegador consumir exceções, a menos que você se refira a erros de script.Erros de script podem ser habilitados através do browser.ScriptErrorsSuppressed
propriedade.
Se você está falando de exceções reais, não apenas de erros de script, pode nos mostrar algum código que reproduza o problema?Usamos o navegador extensivamente e não vimos o que você está descrevendo.
editar o exemplo de código não estava lá quando solicitei um exemplo de código