none
有个疑问,.aspx页面点击提交执行一个循环,在执行这个循环的过程中关闭网页,循环会执行到结束吗? RRS feed

  • 问题

  • 有个疑问,.aspx页面点击提交执行一个循环,在执行这个循环的过程中关闭网页,循环会执行到结束吗?

    是这样的,做了一个用户提交,提交后会循环执行一些操作,担心用户突然关闭了网页,循环执行一半会出现故障,如果解决?

    以前尝试用Global.asax里面做个监控,发现数据库中的某条数据状态是1,就循环执行,但Global.asax通常得访问网页后才会执行,一旦服务器回收,然后它就终止了,

    请老师们给我个解决思路。谢谢

    2012年5月20日 5:32

答案

  • 【解决方案】——异步处理

    protected void Button1_Click(object sender, EventArgs e)
            {
                //注册脚本
                ClientScript.RegisterStartupScript(GetType(), "js", " window.onbeforeunload = function () {return \"确定要关闭吗?\"; };", true);
                new Action
                    (
                        () => 
                        {
                            StreamWriter sw = System.IO.File.CreateText("d:\\try.txt");
                            sw.AutoFlush = true;
                            for (int i = 1; i < 101; i++)
                            {
                                sw.Write(i.ToString());
                                Thread.Sleep(1000);
                            }
                            sw.Close();
                        }
                    ).BeginInvoke(null,null);
            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月20日 6:38

全部回复

  • 有个疑问,.aspx页面点击提交执行一个循环,在执行这个循环的过程中关闭网页,循环会执行到结束吗?

    是这样的,做了一个用户提交,提交后会循环执行一些操作,担心用户突然关闭了网页,循环执行一半会出现故障,如果解决?

    以前尝试用Global.asax里面做个监控,发现数据库中的某条数据状态是1,就循环执行,但Global.asax通常得访问网页后才会执行,一旦服务器回收,然后它就终止了,

    请老师们给我个解决思路。谢谢

    你点击button的时候,页面已经做了提交,因此即便客户端关闭,客户端向服务端发出请求处理数据,循环在服务端做的,和客户端没有关系。所以即便关闭了IE也可以

    【证明】

    WebForm上拉一个Button,双击代码如下:

     StreamWriter sw = System.IO.File.CreateText("d:\\try.txt");
                sw.AutoFlush = true;
                for (int i = 1; i < 101; i++)
                {
                    sw.Write(i.ToString());
                    Thread.Sleep(1000);
                }
                sw.Close();

    启动程序,点击按钮,然后关闭IE,你再次打开运行这个页面就无法运行了。因为服务器还在处理这个文件,会报错的。不过影响不好(隔一段时间你检查D盘这个文件会输出到100的)。

    建议你有可能的话在提交页面时候弹出对话框告诉客户请不要关闭网页。或者干脆用一个WindowsService,或者写到Application_Start事件中处理。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年5月20日 6:16
  • 【解决方案】——异步处理

    protected void Button1_Click(object sender, EventArgs e)
            {
                //注册脚本
                ClientScript.RegisterStartupScript(GetType(), "js", " window.onbeforeunload = function () {return \"确定要关闭吗?\"; };", true);
                new Action
                    (
                        () => 
                        {
                            StreamWriter sw = System.IO.File.CreateText("d:\\try.txt");
                            sw.AutoFlush = true;
                            for (int i = 1; i < 101; i++)
                            {
                                sw.Write(i.ToString());
                                Thread.Sleep(1000);
                            }
                            sw.Close();
                        }
                    ).BeginInvoke(null,null);
            }

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月20日 6:38
  • 谢谢您的回复,您给我的第二个方案是web方式么?

    希望获得更多的解决方案。

    2012年5月20日 13:56
  • 谢谢您的回复,您给我的第二个方案是web方式么?

    希望获得更多的解决方案。

    当然是Web的啊!呵呵

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年5月21日 1:13