我在网页上做了一个导出的功能,但是在导出数据量比较大的时候页面的其它功能会比较卡……
protected void btnExport_Click(object sender, EventArgs e)
{
AsyncExportData Export = new AsyncExportData(this.ExportDataAsync);
AsyncCallback CallBack = new AsyncCallback(ExportCallBack);
HttpContext context=this.Context;
IAsyncResult IAResult = Export.BeginInvoke(context, CallBack, Export);
}
//异步导出
public delegate HSSFWorkbook AsyncExportData(HttpContext context);
public HSSFWorkbook ExportDataAsync(HttpContext context)
{
#region
//导出方法
#endregion
//写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
try
{
context.Response.AppendHeader("Content-Disposition", string.Format("attachment; filename=" + System.Web.HttpUtility.UrlPathEncode("工单导出列表") + ".xls"));
context.Response.BinaryWrite(ms.ToArray());
}
catch
{
}
book = null;
ms.Close();
ms.Dispose();
return book;
#endregion
}
private void ExportCallBack(IAsyncResult Result)
{
AsyncExportData Exoprt = (AsyncExportData)Result.AsyncState;
HSSFWorkbook book = Exoprt.EndInvoke(Result); }新线程里的Response.AppendHeader会报无法追加HTTP标头的错误,不知道该如何解决……ASP.NETcallback
protected void btnExport_Click(object sender, EventArgs e)
{
AsyncExportData Export = new AsyncExportData(this.ExportDataAsync);
AsyncCallback CallBack = new AsyncCallback(ExportCallBack);
HttpContext context=this.Context;
IAsyncResult IAResult = Export.BeginInvoke(context, CallBack, Export);
}
//异步导出
public delegate HSSFWorkbook AsyncExportData(HttpContext context);
public HSSFWorkbook ExportDataAsync(HttpContext context)
{
#region
//导出方法
#endregion
//写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
try
{
context.Response.AppendHeader("Content-Disposition", string.Format("attachment; filename=" + System.Web.HttpUtility.UrlPathEncode("工单导出列表") + ".xls"));
context.Response.BinaryWrite(ms.ToArray());
}
catch
{
}
book = null;
ms.Close();
ms.Dispose();
return book;
#endregion
}
private void ExportCallBack(IAsyncResult Result)
{
AsyncExportData Exoprt = (AsyncExportData)Result.AsyncState;
HSSFWorkbook book = Exoprt.EndInvoke(Result); }新线程里的Response.AppendHeader会报无法追加HTTP标头的错误,不知道该如何解决……ASP.NETcallback
{
AsyncExportData Export = new AsyncExportData(this.ExportDataAsync);
AsyncCallback CallBack = new AsyncCallback(ExportCallBack);
HttpContext context=this.Context;
IAsyncResult IAResult = Export.BeginInvoke(context, CallBack, Export);
}// 你这段代码是由服务器控件触发的吧,这个我感觉不像异步
// 个人觉得应该在前台用javascript将数据异步发送到后台进行导出处理,这样当前页面就不会卡的,你仍然可以在当前页面操作其它元素
例子中是用ajax下载文件,原理是一样的,只不过httpreponseHeader不一样
我觉得这是前24个回帖中最“有意义的”回答了。当然打开一个页面并不会增加导出数据的任何速度,但是总比“多线程”的说法要靠谱了,因为这注意到了是html页面“从submit到再次下载html内容”之间的机制的问题造成的。不过就算是多个页面分别打开不同数据页,也无法合并下载数据,给用户增加了麻烦。
同意!asp.net程序员请不要讨论这类问题,这完全跟asp.net知识不搭界。请学习c/s开发知识,程序员才能开发各种实用的上传下载商用小程序。
同意!asp.net程序员请不要讨论这类问题,这完全跟asp.net知识不搭界。请学习c/s开发知识,程序员才能开发各种实用的上传下载商用小程序。还是不导出数据的时候会卡很久么……俺就是想能不能不让它卡的……
2,非要用多线程,那就把你的线程用来生成静态文件吧。把数据写到文件时。然后让用户在XX秒后访问这个文件