none
Web页面的响应能不能阻塞 “2分钟” ??? RRS feed

  • 问题

  • Web页面的响应能不能阻塞  “2分钟” ???

    protected void Bt_Current_Click(object sender, EventArgs e)
        {
            //问题:怎么样才能让点击按钮,2分钟后再执行下面的代码???
                                            如果是Winform可以使用Thread.sleep(),但是如果是asp.net应该怎么做呢???

                                             这里需要两分钟的时间等待后台Winform程序,将数据处理到数据库中。

            


            //2分钟后出现执行下面的代码
            DateTime DATime = DateTime.Now.AddMinutes(-5);
            string sqlstr = " select * from  T_Warning  where  DATime > '" + DATime + "'  order  by  DATime  desc ";
            Dt_Report = SQLHelper.Query(sqlstr).Tables[0];
            GridViewBind(gv_Report,Dt_Report);
        }

    问题2:

         如果是2分钟后Web页面响应,那么还应该设置Session超期时间吧。

        如果在按钮上加一个客户端 JS时钟,让它弹出来,进行倒计时。到时刻了再执行 后台代码。 这样做可行吗?  是不是先执行JS代码,再执行后台代码的。有没有实例可以参考啊。


    Science and technology is my lover.

    2014年9月15日 6:54

全部回复

  • 你好,

    在asp.net web form中,你同样可以使用Thread.Sleep() 去使当前线程休眠两分钟。只需要添加相应的引用

    但对于你的程序,是否能确定休眠两分钟后,Winform程序 在此期间就可以将数据处理到数据库中。

    当然,你可以在客户端中,添加javascript 代码,使用setTimeout 去执行javascript 中的function,在javascript的function中去 调用后台方法

    我推荐你使用第一种方法。


    2014年9月16日 1:54
  • 楼主:为什么需要2分钟?你是要执行完某个任务才能继续吗?可以详细说说嘛?谢谢。

    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年9月16日 2:48
  • 等待 现场设备数据返回到数据库。

    Science and technology is my lover.

    2014年9月16日 5:27
  • protected void Bt_Current_Click(object sender, EventArgs e)
      {
            //将IsWarining指令置为1
            string sqlstr = "update T_SystemConfig set IsWarning=1";
            SQLHelper.ExecuteSql(sqlstr);


    //等待两秒中
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(2000);
                EmptyMessage = "数据返回中!";
                DateTime DATime = DateTime.Now.AddMinutes(-5);
                sqlstr = " select * from  T_Warning  where  DATime > '" + DATime + "'  order  by  DATime  desc ";
                Dt_Report = SQLHelper.Query(sqlstr).Tables[0];
                
               //绑定GridView刷新页面
                GridViewBind(gv_Report, Dt_Report, EmptyMessage);
                
                 //循环刷新页面
                //Response.Redirect(Request.Url.ToString());
                //Response.Write("<script language=javascript>window.location.reload(); </script>"); 
                //Response.Write("<script language=javascript>window.location.href=document.URL; </script>"); 
                Response.AddHeader("Refresh", "0");
            }
    }


          1、只有当for循环执行完毕之后,页面才会最终刷新。

          2、 如何让页面再循环中,进行了 GridView的数据绑定后(GridViewBind(gv_Report, Dt_Report, EmptyMessage)),马上将页面发送到客户端???  
          
          3、然后循环继续执行,继续进行数据绑定。   直到循环退出,应该怎么实现???        现在页面只有到For循环执行完毕才返回客户端,Response.Write("<script language=javascript>window.location.reload(); </script>"); 脚本也是。

    Science and technology is my lover.

    2014年9月16日 5:27
  • protected void Bt_Current_Click(object sender, EventArgs e)
      {
            //将IsWarining指令置为1
            string sqlstr = "update T_SystemConfig set IsWarning=1";
            SQLHelper.ExecuteSql(sqlstr);


    //等待两秒中
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(2000);
                EmptyMessage = "数据返回中!";
                DateTime DATime = DateTime.Now.AddMinutes(-5);
                sqlstr = " select * from  T_Warning  where  DATime > '" + DATime + "'  order  by  DATime  desc ";
                Dt_Report = SQLHelper.Query(sqlstr).Tables[0];
                
               //绑定GridView刷新页面
                GridViewBind(gv_Report, Dt_Report, EmptyMessage);
                
                 //循环刷新页面
                //Response.Redirect(Request.Url.ToString());
                //Response.Write("<script language=javascript>window.location.reload(); </script>"); 
                //Response.Write("<script language=javascript>window.location.href=document.URL; </script>"); 
                Response.AddHeader("Refresh", "0");
            }
    }


          1、只有当for循环执行完毕之后,页面才会最终刷新。

          2、 如何让页面再循环中,进行了 GridView的数据绑定后(GridViewBind(gv_Report, Dt_Report, EmptyMessage)),马上将页面发送到客户端???  
          
          3、然后循环继续执行,继续进行数据绑定。   直到循环退出,应该怎么实现???        现在页面只有到For循环执行完毕才返回客户端,Response.Write("<script language=javascript>window.location.reload(); </script>"); 脚本也是。

    Science and technology is my lover.

    2014年9月16日 5:27
  • 第一,你的两个帖子重复了,删除某一个。

    其次,如果你的更新语句需要很长时间更新,建议你使用回调函数:

    //自己封装一个类,包含SQLHelper方法: public void ExecuteUpdate(string updateSQL, Action<bool> callBack) { bool isSuccess = false; try { SQLHelper.ExecuteSql(sqlstr); isSuccess = true; } catch { isSuccess = false; } finally { callBack (isSuccess); } } //这样调用 ExecuteUpdate("……",isSuccess=> { if(isSuccess) { //成功的事情 } else { //失败的事情 } });

    另外你既然是写在Click事件,默认那个按钮就应该是submit类型,会自动Post去取数据库重新绑定的。你只要:

    GridView1.DataSource = xxx;

    GridView1.DataBind();

    即可,无需脚本控制刷新页面。


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年9月16日 7:26