catch (ThreadAbortException)
{ }
catch (Exception ex)
{
    TraceManager.TraceException(ex,
                                (int)ErrorCode.GENERIC_EXCEPTION,
                                ex.StackTrace + "\n" + ex.Message + "\n" + VendorUrl);
}
does it make sense to even have the
catch (ThreadAbortException)
{ }
or will that cause the ThreadAbortException to be swallowed and lost forever?