2016-10-05 9 views
0

私は、telerikのRadGridからExcel文書にデータをエクスポートするボタンを持っています。Excelにデータをエクスポートしようとするとエラーが発生します。

私はエクスポートしようとしたときしかし、私は次のようなエラーに遭遇しています:

[System.Threading.ThreadAbortException]: 
{Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.} 

は、ここに私のコードです:

private void GenerateFile(object structure, string fileName) 
{ 
    Workbook workbook = structure as Workbook; 

    var formatProvider = new XlsxFormatProvider(); 

    try 
    { 
     using (MemoryTributary ms = new MemoryTributary()) 
     { 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      Response.AddHeader("content-disposition", "attachment; filename=" + fileName); 

      formatProvider.Export(workbook, ms); 
      ms.Position = 0; 
      ms.WriteTo(Response.OutputStream); 

      Response.End(); 
      } 
     } 
     catch (System.OutOfMemoryException ex) 
     { 
     } 
    } 
} 

私は私がいることを、オンラインで見つけた記事に基づいて、次の解決方法を試してみました同じ問題を処理したが、いずれのソリューションもうまくいきませんでした。

  • "Response.End()"を "HttpContext"に変更してください。 Current.ApplicationInstance.CompleteRequest()」
  • 変更 "Response.Endの()" を "HttpContext.Current.Response.End()"
  • 移動 "Response.Endの()" ついにブロック内。
  • "Response.End()"をtry-catchスコープ外に移動します。

上記の解決方法のいずれも、この問題を解決していません。このエラーを解決する方法についてさらにアドバイスをいただければ幸いです。

ありがとうございました。

+0

まず、catchブロックを削除します。例外が発生した場合は、調査して修正して、それを隠蔽しないようにしてください。第2に、 'Response.End'はすぐに処理を終了することを意味します。あなたは文字通りスレッドを中止するように依頼しました –

+0

なぜ 'Response.End()'を使用していますか?それは必要ではありません –

答えて

1

Response.Endを呼び出して例外が発生しています。 Endの文書化された動作は、バッファをフラッシュし、現在の要求を中止することによって即座に中止することです。 .NETプログラミングでは使用されていません。これは、古いASPコードとの互換性のためだけにあります。

ちょうどあなたがまたcatch文を削除する必要があり、あなたのコード

からResponse.End()を削除します。例外は調査され、修正され、隠されてはならない。 OutOfMemoryExceptionは、リークを引き起こすコードに深刻な問題があることを意味します。メモリが不足しているか、メモリが断片化しているために.NETが十分なブロックを割り当てることができないために発生する可能性があります。

+0

catchステートメントに関するアドバイスをありがとう、常に私のコードのフィードバックをいただきありがとうございます。あなたの提案に従って、私のコードからResponse.Endを削除した後、ファイルがダウンロードされず、Excelが単に開くようになり、私のファイルにいくつかのコンテンツに問題があったというエラーが表示されます。そして、できるだけ試して回復することができます。 – afontalv

関連する問題