• asp.net后台长时间操作时,向前台输出“请等待"信息的方法


          在asp.net中,有时候页面加载时,后台需要进行一些操作,比如查询数据库等。而且可能这些操作需要花费较长时间,致使前台长时间无响应,甚至有可能造成页面超时。可以采用以下方法解决:
          1、asp.net 1.1
          
     1using System.Web.UI;
     2using System.Web.UI.WebControls;
     3using System.Web.UI.WebControls.WebParts;
     4using System.Web.UI.HtmlControls;
     5using System.Threading;
     6public partial class Default2 : System.Web.UI.Page
     7{
     8    private int vlue = 0;
     9    protected void Page_Load(object sender, EventArgs e)
    10    {
    11        Thread td = new Thread(new ThreadStart(BindData));
    12        td.Start();
    13        WritePress();
    14        //BindData();
    15    }

    16    private void WritePress()
    17    {
    18        int i = 0;
    19        while (vlue == 0)
    20        {
    21  
    22            Response.Write("<table  id='s" + i + "' width='100%'><tr ><td></td><td align=center >正在读取数据请稍候.</td></tr></table>");
    23            if (i > 0)
    24            {
    25                Response.Write("<script>document.getElementById('s" + (i - 1+ "').style.display ='none';</script>");
    26            }

    27            i = i + 1;
    28            Response.Flush();
    29       
    30        }

    31        Response.Write("<script>document.getElementById('s" + (i - 1+ "').style.display ='none';</script>");
    32    }

    33    public void BindData()
    34    {
    35        dsOrders DSO = new dsOrders();
    36        DSO.Orders.AddOrdersRow("zp""1", DateTime.Now, DateTime.Now, DateTime.Now, "s""t""sz");
    37        GridView1.DataSource = DSO;
    38        GridView1.DataBind();
    39        Thread.Sleep(700);
    40        vlue = 1;
    41    }
     
    42}

          2、asp.net 2.0
          
     1using System;
     2using System.Data;
     3using System.Configuration;
     4using System.Web;
     5using System.Web.Security;
     6using System.Web.UI;
     7using System.Web.UI.WebControls;
     8using System.Web.UI.WebControls.WebParts;
     9using System.Web.UI.HtmlControls;
    10using System.Threading;
    11public partial class _Default : System.Web.UI.Page
    12{
    13    private AsyncDelegateGetDataSet dgs;
    14    private int i = 0;
    15
    16    protected void Page_Load(object sender, EventArgs e)
    17    {
    18        PageAsyncTask task = new PageAsyncTask(
    19            new BeginEventHandler(BeginAsyncOperation),
    20            new EndEventHandler(EndAsyncOperation),
    21            new EndEventHandler(TimeoutAsyncOperation),
    22            null
    23       );
    24        RegisterAsyncTask(task);
    25        WritePress();
    26    }

    27     public void BindData()
    28    {
    29        dsOrders DSO = new dsOrders();
    30        DSO.Orders.AddOrdersRow("zp""1", DateTime.Now, DateTime.Now, DateTime.Now, "s""t""sz");
    31        GridView1.DataSource = DSO;
    32        GridView1.DataBind();
    33        Thread.Sleep(3000);
    34    }
       
    35    IAsyncResult BeginAsyncOperation(object sender, EventArgs e, 
    36        AsyncCallback cb, object state)
    37    {     
    38
    39        dgs=new AsyncDelegateGetDataSet(BindData);
    40        return dgs.BeginInvoke(cb, state);
    41    }

    42    void EndAsyncOperation(IAsyncResult ar)
    43    {
    44        Response.Write("<script>document.getElementById('s" + (i - 1+ "').style.display ='none';</script>");
    45        dgs.EndInvoke(ar);
    46    }

    47    void TimeoutAsyncOperation(IAsyncResult ar)
    48    { }
    49    private void WritePress()
    50    {
    51        while (i<3)
    52        {
    53
    54            Response.Write("<table  id='s" + i + "' width='100%'><tr ><td></td><td align=center >正在读取数据请稍候.</td></tr></table>");
    55            if (i > 0)
    56            {
    57                Response.Write("<script>document.getElementById('s" + (i - 1+ "').style.display ='none';</script>");
    58            }

    59            i = i + 1;
    60            Response.Flush();
    61
    62        }

    63    }

    64
    65}

    66public delegate void AsyncDelegateGetDataSet();

          在asp.net2.0的代码中采用了异步页,实现效率提高了。但是有一点不明白,一定要循环3次以上(while(i<3))前台才会显示正在读取数据请稍候...”.
  • 相关阅读:
    UVA 10608 Friends
    UVA 10806 Dijkstra, Dijkstra.
    HDU 3715 Go Deeper
    poj1315
    poj1383
    poj1650
    poj1265
    poj1523
    RedHat9.0虚拟机安装
    注册DirectShow filter时应该注意中文路径
  • 原文地址:https://www.cnblogs.com/zjzkiss/p/637473.html