ThreadAbortException not behaving properly?

  • Thread starter Thread starter Steve - DND
  • Start date Start date
S

Steve - DND

I just implemented a page that performs a Response.Redirect(url, true). As
such, I wrapped it in a try catch, and explicitly caught a
ThreadAbortException. However, the thread abort exception was still thrown
at every catch block above the try/catches level, as well as at the *same*
level as the try/catch. This does not seem like proper behavior at all. Once
I've caught the exception, why is it still propagating up the stack? I could
maybe understand it going up the stack, but how it it getting into catch
blocks at the same level? Below is some code that illustrates what happened.

function void doStuff(string url) {
try {
try {
Response.Redirect(url, true);
} catch (ThreadAbortException) {
//This is hit
Logger.Log("Aborted");
}

try {

} catch (Exception e) {
//This is hit.
Logger.Log(e, "Aborted same level");
}
} catch (Exception e) {
//This is hit.
Logger.Log(e, "Aborted level above");
}
}

All of those Log statements are hit unless for each one I put a "catch
(ThreadAbortException)" in there. What is going on here, and why?

Thanks,
Steve
 
I dont know why it is behaving like this in your case. But you can avoid the
threadabortexception by passing "false" as second parameter to
response.redirect.
 
But then it will continue to process any code left on the page, won't it? So
I would have to implement a class level variable indicating that no further
processing should occur. Correct?

Steve
 
You are correct, it will process the code after response.redirect. If you
dont want it to happen, then you shouldnt pass "false" as the parameter
value for EndResponse parameter.

--
Saravana
Microsoft MVP - ASP.NET
www.extremeexperts.com



Steve - DND said:
But then it will continue to process any code left on the page, won't it? So
I would have to implement a class level variable indicating that no further
processing should occur. Correct?

Steve
 
Back
Top