C# 无法在asp.net应用程序中读取已关闭的TextReader expeption
我正在运行一个ASP 4.5应用程序。其中一页用户必须回答几个问题并按下按钮以完成测试。我的应用程序使用一个文本文件来分析用户的答案。如果用户做任何事情都很快,应用程序工作正常,但是当他完成测试的时间超过20分钟时,我会遇到一个异常 无法从关闭的文本读取器中读取 我不明白出了什么问题,因为我只在按下按钮时打开StreamReader。这是我代码的一部分:C# 无法在asp.net应用程序中读取已关闭的TextReader expeption,c#,asp.net,textreader,C#,Asp.net,Textreader,我正在运行一个ASP 4.5应用程序。其中一页用户必须回答几个问题并按下按钮以完成测试。我的应用程序使用一个文本文件来分析用户的答案。如果用户做任何事情都很快,应用程序工作正常,但是当他完成测试的时间超过20分钟时,我会遇到一个异常 无法从关闭的文本读取器中读取 我不明白出了什么问题,因为我只在按下按钮时打开StreamReader。这是我代码的一部分: protected void Page_Load(object sender, EventArgs e) { if (!IsPos
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GlobalVariables.surname = Request.QueryString["surname"];
GlobalVariables.name = Request.QueryString["name"];
GlobalVariables.gender = Request.QueryString["gender"];
GlobalVariables.age = int.Parse(Request.QueryString["age"]);
}
Label1.Width = 700;
Button1.Click += new EventHandler(this.Button1_Click);
}
void Button1_Click(Object sender, EventArgs e)
{
var f0= new FileStream(Server.MapPath("./key.txt"), FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(f0);
//.....
sr.Close();
sr.Dispose();
}
有人能帮我吗?如果该页面不是回发邮件,您需要设置该页面,因为它应该是第一次查看。我还建议在if(!Page.IsPostBack)中移动按钮单击,以及在回发之前需要设置的任何内容。将流读取器移动到else。。。与此类似,如果(!Page.IsPostBack)else{stream reader stuff}并删除该按钮,则即使在一般情况下也会单击该按钮,因为该按钮会导致回发
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GlobalVariables.surname = Request.QueryString["surname"];
GlobalVariables.name = Request.QueryString["name"];
GlobalVariables.gender = Request.QueryString["gender"];
GlobalVariables.age = int.Parse(Request.QueryString["age"]);
Label1.Width = 700;
}
else
{
DoPostBackStuff();
}
}
private void DoPostBackStuff()
{
var f0= new FileStream(Server.MapPath("./key.txt"), FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(f0);
//.....
sr.Close();
sr.Dispose();
}
当他完成测试的时间超过20分钟时,我得到一个例外
这听起来很像他们的课程已经过期了。为了解决这个问题,我建议添加一些javascript来建立web服务器的心跳。心跳将使会话保持活动状态;它不需要做任何事情,只需要每隔一分钟左右发出一个请求,这样服务器就知道你还在那里。除了Joel的回答之外,我建议将处理文件与读取文件分开
List<string> lines = new List<string>();
using (var f0 = new FileStream(Server.MapPath("./key.txt"), FileMode.Open, FileAccess.Read))
{
string line;
using (StreamReader reader = new StreamReader(f0))
{
while ((line = reader.ReadLine()) != null)
{
lines.add(line);
}
}
}
// it would need to be a very big text file to be a memory issue
// do your processing here
列表行=新列表();
使用(var f0=newfilestream(Server.MapPath(“./key.txt”)、FileMode.Open、FileAccess.Read)
{
弦线;
使用(StreamReader=新StreamReader(f0))
{
而((line=reader.ReadLine())!=null)
{
行。添加(行);
}
}
}
//它需要一个非常大的文本文件才能成为内存问题
//你在这里处理吗
请显示完整的异常堆栈跟踪-并在设置问题中的代码格式方面投入更多精力;现在到处都是。如果页面不是回发的,你会希望设置页面,因为它应该是第一次查看的。我还建议在(!Page.IsPostBack)以及回发之前需要设置的任何内容中移动按钮,甚至在中单击。将流读取器移动到else。。。像这样if(!Page.IsPostBack)else{stream reader stuff}
并删除按钮,因为按钮会导致回发。@AndrewGrinder谢谢你的建议,我会在半小时内尝试一下,看看它是否工作1“mis”=1分钟?@是的,对不起,你能举一个这样心跳的例子吗?我是javascript的比根纳。我也考虑了会话,并尝试将sessionState timeout=“300”添加到web.config,但它不起作用,必须是会话。确保设置正确,没有在其他地方设置,等等。这是我的web.config的一部分:我看不到中有错误it@user2080209开始管理它。将阅读文本文件与处理文本文件分开,如我的答案所示。加入一些错误处理,以便更好地隔离错误。测试会话变量。