thread was being aborted

Discussion in 'ASP .Net' started by DC Gringo, Jul 21, 2005.

  1. DC Gringo

    DC Gringo Guest

    I have some code that creates and writes to an excel file. Right as I
    response.end() to avoid HTML in the Excel document, I get an exception:

    ---------------

    An attempt to log the following error
    failed:System.Threading.ThreadAbortException: Thread was being aborted.
    at System.Threading.Thread.AbortInternal()
    at System.Threading.Thread.Abort(Object stateInfo)
    at System.Web.HttpResponse.End()

    -----------------

    Here's my code


    Public Sub btnShasExcel_OnClick(ByVal sender As System.Object, ByVal e As
    System.EventArgs)

    Try
    Dim ds As New DataSet
    Dim da As New SqlDataAdapter(Session("savedShasSql"),
    connection1.conString)
    da.Fill(ds, "ShasExcel")
    Dim dt As DataTable = ds.Tables("ShasExcel")

    'This code was dumping html into the spreadsheet
    'Response.ContentType = "application/ms-excel"
    'Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    'Response.Write(ConvertDtToTDF(dt))

    'This is the new code
    Response.ContentType = "application/ms-excel"
    Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    Response.Clear()
    Response.Write(ConvertDtToTDF(dt))
    Response.End()

    Catch ex As Exception
    ExceptionManager.Publish(ex)
    End Try

    End Sub



    Private Function ConvertDtToTDF(ByVal dt As DataTable) As String

    Try

    Dim dr As DataRow, ary() As Object, i As Integer
    Dim iCol As Integer

    'Output Column Headers
    For iCol = 0 To dt.Columns.Count - 1
    Response.Write(dt.Columns(iCol).ToString & vbTab)
    Next

    Response.Write(vbCrLf)

    'Output Data

    For Each dr In dt.Rows
    ary = dr.ItemArray
    For i = 0 To UBound(ary)
    Response.Write(ary(i).ToString & vbTab)
    Next
    Response.Write(vbCrLf)
    Next

    Catch ex As Exception
    ExceptionManager.Publish(ex)

    End Try

    End Function

    _____
    DC G
    DC Gringo, Jul 21, 2005
    #1
    1. Advertising

  2. Gringo,

    you might want to replace Response.End() with Response.Flush.

    Let me know if this works for you.

    Daniel Walzenbach


    "DC Gringo" <> schrieb im Newsbeitrag
    news:...
    >I have some code that creates and writes to an excel file. Right as I
    >response.end() to avoid HTML in the Excel document, I get an exception:
    >
    > ---------------
    >
    > An attempt to log the following error
    > failed:System.Threading.ThreadAbortException: Thread was being aborted.
    > at System.Threading.Thread.AbortInternal()
    > at System.Threading.Thread.Abort(Object stateInfo)
    > at System.Web.HttpResponse.End()
    >
    > -----------------
    >
    > Here's my code
    >
    >
    > Public Sub btnShasExcel_OnClick(ByVal sender As System.Object, ByVal e As
    > System.EventArgs)
    >
    > Try
    > Dim ds As New DataSet
    > Dim da As New SqlDataAdapter(Session("savedShasSql"),
    > connection1.conString)
    > da.Fill(ds, "ShasExcel")
    > Dim dt As DataTable = ds.Tables("ShasExcel")
    >
    > 'This code was dumping html into the spreadsheet
    > 'Response.ContentType = "application/ms-excel"
    > 'Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    > 'Response.Write(ConvertDtToTDF(dt))
    >
    > 'This is the new code
    > Response.ContentType = "application/ms-excel"
    > Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    > Response.Clear()
    > Response.Write(ConvertDtToTDF(dt))
    > Response.End()
    >
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    > End Try
    >
    > End Sub
    >
    >
    >
    > Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
    >
    > Try
    >
    > Dim dr As DataRow, ary() As Object, i As Integer
    > Dim iCol As Integer
    >
    > 'Output Column Headers
    > For iCol = 0 To dt.Columns.Count - 1
    > Response.Write(dt.Columns(iCol).ToString & vbTab)
    > Next
    >
    > Response.Write(vbCrLf)
    >
    > 'Output Data
    >
    > For Each dr In dt.Rows
    > ary = dr.ItemArray
    > For i = 0 To UBound(ary)
    > Response.Write(ary(i).ToString & vbTab)
    > Next
    > Response.Write(vbCrLf)
    > Next
    >
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    >
    > End Try
    >
    > End Function
    >
    > _____
    > DC G
    >
    Daniel Walzenbach, Jul 21, 2005
    #2
    1. Advertising

  3. DC Gringo

    DC Gringo Guest

    Daniel,

    Sorry, it didn't work. I didn't get the error, but the HTML returned to the
    Excel file. Putting the response.flush() after the response.close() or vice
    versa still generated the error.

    _____
    DC G


    "Daniel Walzenbach" <> wrote in message
    news:%...
    > Gringo,
    >
    > you might want to replace Response.End() with Response.Flush.
    >
    > Let me know if this works for you.
    >
    > Daniel Walzenbach
    >
    >
    > "DC Gringo" <> schrieb im Newsbeitrag
    > news:...
    >>I have some code that creates and writes to an excel file. Right as I
    >>response.end() to avoid HTML in the Excel document, I get an exception:
    >>
    >> ---------------
    >>
    >> An attempt to log the following error
    >> failed:System.Threading.ThreadAbortException: Thread was being aborted.
    >> at System.Threading.Thread.AbortInternal()
    >> at System.Threading.Thread.Abort(Object stateInfo)
    >> at System.Web.HttpResponse.End()
    >>
    >> -----------------
    >>
    >> Here's my code
    >>
    >>
    >> Public Sub btnShasExcel_OnClick(ByVal sender As System.Object, ByVal e As
    >> System.EventArgs)
    >>
    >> Try
    >> Dim ds As New DataSet
    >> Dim da As New SqlDataAdapter(Session("savedShasSql"),
    >> connection1.conString)
    >> da.Fill(ds, "ShasExcel")
    >> Dim dt As DataTable = ds.Tables("ShasExcel")
    >>
    >> 'This code was dumping html into the spreadsheet
    >> 'Response.ContentType = "application/ms-excel"
    >> 'Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    >> 'Response.Write(ConvertDtToTDF(dt))
    >>
    >> 'This is the new code
    >> Response.ContentType = "application/ms-excel"
    >> Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    >> Response.Clear()
    >> Response.Write(ConvertDtToTDF(dt))
    >> Response.End()
    >>
    >> Catch ex As Exception
    >> ExceptionManager.Publish(ex)
    >> End Try
    >>
    >> End Sub
    >>
    >>
    >>
    >> Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
    >>
    >> Try
    >>
    >> Dim dr As DataRow, ary() As Object, i As Integer
    >> Dim iCol As Integer
    >>
    >> 'Output Column Headers
    >> For iCol = 0 To dt.Columns.Count - 1
    >> Response.Write(dt.Columns(iCol).ToString & vbTab)
    >> Next
    >>
    >> Response.Write(vbCrLf)
    >>
    >> 'Output Data
    >>
    >> For Each dr In dt.Rows
    >> ary = dr.ItemArray
    >> For i = 0 To UBound(ary)
    >> Response.Write(ary(i).ToString & vbTab)
    >> Next
    >> Response.Write(vbCrLf)
    >> Next
    >>
    >> Catch ex As Exception
    >> ExceptionManager.Publish(ex)
    >>
    >> End Try
    >>
    >> End Function
    >>
    >> _____
    >> DC G
    >>

    >
    >
    DC Gringo, Jul 21, 2005
    #3
  4. DC Gringo

    Brock Allen Guest

    Yes, this is the way ASP.NET attempts to insure that the processing halts
    for the current request -- they throw a ThreadAbortException. Sort of odd,
    eh? Well, the magic with a ThreadAbortException is that if you put a try/catch
    around it, it still gets thrown outside your catch -- they're doing this
    so you don't catch their attempt to terminate the request. So, in short,
    it's just how it works.

    -Brock
    DevelopMentor
    http://staff.develop.com/ballen



    > I have some code that creates and writes to an excel file. Right as I
    > response.end() to avoid HTML in the Excel document, I get an
    > exception:
    >
    > ---------------
    >
    > An attempt to log the following error
    > failed:System.Threading.ThreadAbortException: Thread was being
    > aborted.
    > at System.Threading.Thread.AbortInternal()
    > at System.Threading.Thread.Abort(Object stateInfo)
    > at System.Web.HttpResponse.End()
    > -----------------
    >
    > Here's my code
    >
    > Public Sub btnShasExcel_OnClick(ByVal sender As System.Object, ByVal e
    > As System.EventArgs)
    >
    > Try
    > Dim ds As New DataSet
    > Dim da As New SqlDataAdapter(Session("savedShasSql"),
    > connection1.conString)
    > da.Fill(ds, "ShasExcel")
    > Dim dt As DataTable = ds.Tables("ShasExcel")
    > 'This code was dumping html into the spreadsheet
    > 'Response.ContentType = "application/ms-excel"
    > 'Response.AddHeader("Content-Disposition",
    > "inline;filename=shas.xls")
    > 'Response.Write(ConvertDtToTDF(dt))
    > 'This is the new code
    > Response.ContentType = "application/ms-excel"
    > Response.AddHeader("Content-Disposition",
    > "inline;filename=shas.xls")
    > Response.Clear()
    > Response.Write(ConvertDtToTDF(dt))
    > Response.End()
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    > End Try
    > End Sub
    >
    > Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
    >
    > Try
    >
    > Dim dr As DataRow, ary() As Object, i As Integer
    > Dim iCol As Integer
    > 'Output Column Headers
    > For iCol = 0 To dt.Columns.Count - 1
    > Response.Write(dt.Columns(iCol).ToString & vbTab)
    > Next
    > Response.Write(vbCrLf)
    >
    > 'Output Data
    >
    > For Each dr In dt.Rows
    > ary = dr.ItemArray
    > For i = 0 To UBound(ary)
    > Response.Write(ary(i).ToString & vbTab)
    > Next
    > Response.Write(vbCrLf)
    > Next
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    > End Try
    >
    > End Function
    >
    > _____
    > DC G
    Brock Allen, Jul 22, 2005
    #4
  5. DC Gringo

    Bruce Barker Guest

    a Response.End() does a flush, then kills the current thread (to stop
    continued processing). ignore the thread abort in your catch

    -- bruce (sqlwork.com)




    "DC Gringo" <> wrote in message
    news:...
    >I have some code that creates and writes to an excel file. Right as I
    >response.end() to avoid HTML in the Excel document, I get an exception:
    >
    > ---------------
    >
    > An attempt to log the following error
    > failed:System.Threading.ThreadAbortException: Thread was being aborted.
    > at System.Threading.Thread.AbortInternal()
    > at System.Threading.Thread.Abort(Object stateInfo)
    > at System.Web.HttpResponse.End()
    >
    > -----------------
    >
    > Here's my code
    >
    >
    > Public Sub btnShasExcel_OnClick(ByVal sender As System.Object, ByVal e As
    > System.EventArgs)
    >
    > Try
    > Dim ds As New DataSet
    > Dim da As New SqlDataAdapter(Session("savedShasSql"),
    > connection1.conString)
    > da.Fill(ds, "ShasExcel")
    > Dim dt As DataTable = ds.Tables("ShasExcel")
    >
    > 'This code was dumping html into the spreadsheet
    > 'Response.ContentType = "application/ms-excel"
    > 'Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    > 'Response.Write(ConvertDtToTDF(dt))
    >
    > 'This is the new code
    > Response.ContentType = "application/ms-excel"
    > Response.AddHeader("Content-Disposition", "inline;filename=shas.xls")
    > Response.Clear()
    > Response.Write(ConvertDtToTDF(dt))
    > Response.End()
    >
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    > End Try
    >
    > End Sub
    >
    >
    >
    > Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
    >
    > Try
    >
    > Dim dr As DataRow, ary() As Object, i As Integer
    > Dim iCol As Integer
    >
    > 'Output Column Headers
    > For iCol = 0 To dt.Columns.Count - 1
    > Response.Write(dt.Columns(iCol).ToString & vbTab)
    > Next
    >
    > Response.Write(vbCrLf)
    >
    > 'Output Data
    >
    > For Each dr In dt.Rows
    > ary = dr.ItemArray
    > For i = 0 To UBound(ary)
    > Response.Write(ary(i).ToString & vbTab)
    > Next
    > Response.Write(vbCrLf)
    > Next
    >
    > Catch ex As Exception
    > ExceptionManager.Publish(ex)
    >
    > End Try
    >
    > End Function
    >
    > _____
    > DC G
    >
    Bruce Barker, Jul 22, 2005
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Elliot M. Rodriguez
    Replies:
    1
    Views:
    2,932
    Elliot M. Rodriguez
    Jan 22, 2004
  2. Stephen Miller
    Replies:
    3
    Views:
    3,966
    Stephen Miller
    Jul 2, 2004
  3. Johanna
    Replies:
    0
    Views:
    603
    Johanna
    Oct 13, 2004
  4. =?Utf-8?B?Sm9oYW5uYQ==?=
    Replies:
    3
    Views:
    1,954
    =?Utf-8?B?Sm9oYW5uYQ==?=
    Oct 15, 2004
  5. peppermonkey
    Replies:
    1
    Views:
    243
    Gregory Brown
    Feb 10, 2007
Loading...

Share This Page