服务端代码:
FileStream f = ...;
Response.Clear();
Response.Buffer = true;
Response.AddHeader(...)
...
try
while (Response.IsClientConnected)
{
bytes[] b = new bytes[1024];
int len = f.Read(buffer, 0, 1024);
Response.OutputStream.Write(b, len);
....
}
finally
{
释放资源
}在下载过程中,客户端点取消,Response.IsClientConnected一直为true,要等很长时间(估计要把文件读完)后才能响应客户端其他操作。
有什么办法,在客户端点了取消后,直接跳出循环?
FileStream f = ...;
Response.Clear();
Response.Buffer = true;
Response.AddHeader(...)
...
try
while (Response.IsClientConnected)
{
bytes[] b = new bytes[1024];
int len = f.Read(buffer, 0, 1024);
Response.OutputStream.Write(b, len);
....
}
finally
{
释放资源
}在下载过程中,客户端点取消,Response.IsClientConnected一直为true,要等很长时间(估计要把文件读完)后才能响应客户端其他操作。
有什么办法,在客户端点了取消后,直接跳出循环?
解决方案 »
- 一个简单的C#学生成绩管理系统
- 自动生成控件的问题、
- 怎么让鼠标在Button区域内的时候,既能够拖动窗体,也能够响应Click事件?
- 麻烦懂C#的朋友帮我看看这段代码,为什么我没有办法运行?
- 检测到指定的WEB服务器运行的不是ASP.NET 1.1版本?
- ListView选定项的索引,提问,加急!
- 枚举和位域、按位与运算符的困惑
- 问一个简单的form提交的问题看了一个上午未解决。。
- 连接数据库出错问题(已成功与服务器建立连接,但是在登录过程中发生错误)
- 为什么找不到“模块”?
- 请问如何把DATAGRID的内容写回到dataset中?谢谢
- C#使用FileStream.read的导致溢出的问题
用Session怎么做呢?to zlkingdom(风之悲伤) :
客户端取消的时候能发回指令?怎么截获IE那个下载提示框的取消事件?
// server side
while( Session["Download"] != null && Session["Download"].ToString() == "true" )
{
//Download file
}然后你在点击下载的时候,首先要把此值赋为true;如果点击取消,把此值赋为false即可。
把下载部分的代码写到一个Timer中去执行,每读一块,写一下标记,主线程每隔1秒区判断一个标记,连续20次标记不正确(20秒)则退出并释放资源。
但这个方法有一个问题,如果客户端的下载提示框弹出后,不点下载或打开等任何按钮,20秒后也会重置。另外,不知道网速很慢的情况下会不会有影响。