É bastante comum vermos o seguinte erro “Thread was being aborted.” em fórums, listas e aplicações que desenvolvemos. Há vezes em que o método Response.Redirect(“url”) é chamado dentro de um código gerenciado pelo Try…Catch.
O grande problema é que o método Response.Redirect(“url”) quando chamado desta forma, internamente ele invoca o método Response.End, e este por sua vez dispara a seguinte Exception: ThreadAbortException para finalizar o processamento da página corrente. Sendo assim, se o Response.Redirect estiver sendo gerenciado pelo bloco Try, ele capturará a Exception, e assim, se existir o bloco Catch, será executado.
Como muitos não conhecem, existe um overload do método Response.Redirect(“url”, “True | False”) que além de receber a URL qual o usuário será redirecionado, recebe também um parâmetro booleano que indica se a página terá ou não o seu processamento abortado através do método Response.End. Se definirmos como False, a página é executada até o término e assim, não invocando o método Response.End, e assim o usuário é redirecionado para a nova página.
Abaixo o código interno do método Response.Redirect:
Public Sub Redirect(ByVal url As String, ByVal endResponse As Boolean)
‘….
If endResponse Then
Me.End
End If
End Sub
E quando não informarmos o parâmetro booleano, por default é informado como True, logo, a página será finalizada através do Response.End e assim vai atirar a Exception.
Israel.
tirei o try/catch da chamada e funcionou perfeitamente.
Muito obrigado!
no meu caso não funcinou o redirect não redireciona. A pagina fica estática ( Response.Redirect(“~\\Default.aspx”,false); break;)…