【问题标题】:"Thread is terminated" runtime error when initiating download启动下载时出现“线程已终止”运行时错误
【发布时间】:2011-09-21 17:01:08
【问题描述】:

情况:

在一个 C# 网站项目中,我从数据库中获取数据并将所需数据写入 excel 文件服务器端,然后我想提供下载。

问题:

在启动下载的代码末尾(见下文)我收到一个运行时错误,表明线程已终止并且没有文件可供下载。

我的代码

FileStream fStream = new FileStream(resultFile, FileMode.Open, FileAccess.Read);
byte[] byteBuffer = new byte[(int)fStream.Length];
fStream.Read(byteBuffer, 0, (int)fStream.Length);
fStream.Close();

response.Clear();
response.ContentType = "application/vnd.ms-excel";
response.AddHeader("Content-Length", byteBuffer.Length.ToString());
response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(resultFile));
response.TransmitFile(resultFile);
response.End();

我希望有人可以帮助我解决这个问题。在此先感谢:)

【问题讨论】:

  • @GregoryNozik,TransmitFile 是这里的正确选择吗?看起来 OP 想要一个同步解决方案。
  • 我应该说是中断而不是顺便终止。无论如何,我在没有响应的情况下尝试了它。结束并且我没有收到错误,但我也没有得到一个对话框来保存提供下载的文件。而不是 TransmitFile 我也尝试了 WriteFile(resultFile) 和 BinaryWrite(byteBuffer) 但我得到了同样的错误......
  • 代码在 Web 方法中这一事实是否与此有关?
  • @Gregory Nozik:是的,但它只是在响应时停止执行 webmehod。End 行并且提琴手显示 500,或者没有该行我得到 200 但什么也没发生
  • 你在哪些浏览器上试用过这个? (IE比较敏感,要求页面URL与下载文件名匹配,例如)

标签: asp.net multithreading download terminate


【解决方案1】:

我使用以下代码下载 Excel

   FileStream fs = File.OpenRead(path);
   byte[] data = new byte[fs.Length];
   fs.Read(data, 0, (int)fs.Length);
   Response.Buffer = true;
   Response.ContentType = "application/x-msdownload";
   Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName  );
   Response.BinaryWrite(data);

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 2011-06-13
    • 2020-11-24
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多