Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在asp.net应用程序中读取已关闭的TextReader expeption_C#_Asp.net_Textreader - Fatal编程技术网

C# 无法在asp.net应用程序中读取已关闭的TextReader expeption

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

我正在运行一个ASP 4.5应用程序。其中一页用户必须回答几个问题并按下按钮以完成测试。我的应用程序使用一个文本文件来分析用户的答案。如果用户做任何事情都很快,应用程序工作正常,但是当他完成测试的时间超过20分钟时,我会遇到一个异常

无法从关闭的文本读取器中读取

我不明白出了什么问题,因为我只在按下按钮时打开StreamReader。这是我代码的一部分:

 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开始管理它。将阅读文本文件与处理文本文件分开,如我的答案所示。加入一些错误处理,以便更好地隔离错误。测试会话变量。