★33°空間‰


                                 ----★七彩服飾  【最潮拜☆日單精品】【Esprit】【Hotwind】滿150包郵-女裝-流行女裝    www.7color.hb.cn

                                 ----智力比知識(shí)重要,素質(zhì)比智力重要,覺悟比素質(zhì)更重要
          posts - 110,comments - 35,trackbacks - 0

          網(wǎng)上已經(jīng)有很多Web進(jìn)度條的例子,但是很多都是估算時(shí)間,不能正真反應(yīng)任務(wù)的真實(shí)進(jìn)度。我自己結(jié)合多線程和ShowModalDialog制做了一個(gè)實(shí)時(shí)進(jìn)度條,原理很簡(jiǎn)單:使用線程開始長時(shí)間的任務(wù),定義一個(gè)Session,當(dāng)任務(wù)進(jìn)行到不同的階段改變Session的值,線程開始的同時(shí)使用ShowModalDialog打開一個(gè)進(jìn)度條窗口,不斷刷新這個(gè)窗口獲取Session值,反應(yīng)出實(shí)時(shí)的進(jìn)度。下面就來看看具體的代碼:(文章結(jié)尾處下載源代碼)

          先新建一個(gè)Default.aspx頁面,
          客戶端代碼:

          <body MS_POSITIONING="GridLayout">
          ??? <form id="Form1" method="post" runat="server">
          ??????????? <br>
          ??????????? <br>
          ??????????? <asp:Button id="Button1" runat="server" Text="Start Long Task!"></asp:Button>
          ??? </form>
          </body>
          服務(wù)器端代碼:
          using System;
          using System.Collections;
          using System.ComponentModel;
          using System.Data;
          using System.Drawing;
          using System.Web;
          using System.Web.SessionState;
          using System.Web.UI;
          using System.Web.UI.WebControls;
          using System.Web.UI.HtmlControls;
          using System.Text;

          namespace WebProgressBar
          {
          ??? /**//// <summary>
          ??? /// Summary description for _Default.
          ??? /// </summary>
          ??? public class _Default : System.Web.UI.Page
          ??? {
          ??????? protected System.Web.UI.WebControls.Button Button1;
          ???
          ??????? private void Page_Load(object sender, System.EventArgs e)
          ??????? {
          ??????????? // Put user code to initialize the page here
          ??????? }

          ??????? Web Form Designer generated code#region Web Form Designer generated code
          ??????? override protected void OnInit(EventArgs e)
          ??????? {
          ??????????? //
          ??????????? // CODEGEN: This call is required by the ASP.NET Web Form Designer.
          ??????????? //
          ??????????? InitializeComponent();
          ??????????? base.OnInit(e);
          ??????? }
          ???????
          ??????? /**//// <summary>
          ??????? /// Required method for Designer support - do not modify
          ??????? /// the contents of this method with the code editor.
          ??????? /// </summary>
          ??????? private void InitializeComponent()
          ??????? {???
          ??????????? this.Button1.Click += new System.EventHandler(this.Button1_Click);
          ??????????? this.Load += new System.EventHandler(this.Page_Load);

          ??????? }
          ??????? #endregion

          ??????? private void LongTask()
          ??????? {
          ??????????? //模擬長時(shí)間任務(wù)
          ??????????? //每個(gè)循環(huán)模擬任務(wù)進(jìn)行到不同的階段
          ??????????? for(int i=0;i<11;i++)
          ??????????? {
          ??????????????? System.Threading.Thread.Sleep(1000);
          ??????????????? //設(shè)置每個(gè)階段的state值,用來顯示當(dāng)前的進(jìn)度
          ??????????????? Session["State"] = i+1;
          ??????????? }
          ??????????? //任務(wù)結(jié)束
          ??????????? Session["State"] = 100;

          ??????? }

          ??????? public static void OpenProgressBar(System.Web.UI.Page Page)
          ??????? {
          ??????????? StringBuilder sbScript = new StringBuilder();

          ??????????? sbScript.Append("<script language='javascript' type='text/javascript'>\n");
          ??????????? sbScript.Append("<!--\n");
          ??????????? //需要IE5.5以上支持
          ??????????? sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; edge: Raised; center: Yes; help: No; resizable: No; status: No;scroll:No;');\n");
          ??????????? //IE5.5以下使用window.open
          ??????????? //sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no');\n");
          ??????????? sbScript.Append("http:// -->\n");
          ??????????? sbScript.Append("</script>\n");

          ??????????? Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
          ??????? }

          ??????? private void Button1_Click(object sender, System.EventArgs e)
          ??????? {
          ??????????? System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
          ??????????? thread.Start();

          ??????????? Session["State"]=1;
          ??????????? OpenProgressBar(this.Page);
          ??????? }
          ??? }
          }


          新建一個(gè)進(jìn)度條頁面Progress.aspx
          客戶端:
          在head中加入<base target="_self">
          <body MS_POSITIONING="GridLayout">
          ??????? <form id="Form1" method="post" runat="server">
          ??????????? <asp:Label id="lblMessages" runat="server"></asp:Label>
          ??????????? <asp:Panel id="panelBarSide" runat="server" Width="300px" BorderStyle="Solid" BorderWidth="1px"
          ??????????????? ForeColor="Silver">
          ??????????????? <asp:Panel id="panelProgress" runat="server" Width="10px" BackColor="Green"></asp:Panel>
          ??????????? </asp:Panel>
          ??????????? <asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
          ??????? </form>
          </body>
          服務(wù)器端:
          using System;
          using System.Collections;
          using System.ComponentModel;
          using System.Data;
          using System.Drawing;
          using System.Web;
          using System.Web.SessionState;
          using System.Web.UI;
          using System.Web.UI.WebControls;
          using System.Web.UI.HtmlControls;

          namespace WebProgressBar
          {
          ??? /**//// <summary>
          ??? /// Summary description for Progress.
          ??? /// </summary>
          ??? public class Progress : System.Web.UI.Page
          ??? {
          ??????? protected System.Web.UI.WebControls.Label lblMessages;
          ??????? protected System.Web.UI.WebControls.Panel panelProgress;
          ??????? protected System.Web.UI.WebControls.Panel panelBarSide;
          ??????? protected System.Web.UI.WebControls.Label lblPercent;
          ???
          ??????? private int state = 0;
          ??????? private void Page_Load(object sender, System.EventArgs e)
          ??????? {
          ??????????? // Put user code to initialize the page here
          ??????????? if(Session["State"]!=null)
          ??????????? {
          ??????????????? state = Convert.ToInt32(Session["State"].ToString());
          ??????????? }
          ??????????? else
          ??????????? {
          ??????????????? Session["State"]=0;
          ??????????? }
          ??????????? if(state>0&&state<=10)
          ??????????? {
          ??????????????? this.lblMessages.Text = "Task undertaking!";
          ??????????????? this.panelProgress.Width = state*30;
          ??????????????? this.lblPercent.Text = state*10 + "%";
          ??????????????? Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
          ??????????? }
          ??????????? if(state==100)
          ??????????? {
          ??????????????? this.panelProgress.Visible = false;
          ??????????????? this.panelBarSide.Visible = false;
          ??????????????? this.lblMessages.Text = "Task Completed!";
          ??????????????? Page.RegisterStartupScript("","<script>window.close();</script>");
          ??????????? }
          ??????? }

          ??????? Web Form Designer generated code#region Web Form Designer generated code
          ??????? override protected void OnInit(EventArgs e)
          ??????? {
          ??????????? //
          ??????????? // CODEGEN: This call is required by the ASP.NET Web Form Designer.
          ??????????? //
          ??????????? InitializeComponent();
          ??????????? base.OnInit(e);
          ??????? }
          ???????
          ??????? /**//// <summary>
          ??????? /// Required method for Designer support - do not modify
          ??????? /// the contents of this method with the code editor.
          ??????? /// </summary>
          ??????? private void InitializeComponent()
          ??????? {???
          ??????????? this.Load += new System.EventHandler(this.Page_Load);

          ??????? }
          ??????? #endregion
          ??? }
          }

          posted on 2007-03-23 10:28 圣域飛俠 閱讀(236) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載
          主站蜘蛛池模板: 漳浦县| 黄陵县| 营山县| 邢台市| 墨玉县| 特克斯县| 静安区| 泸水县| 中阳县| 潞城市| 虹口区| 白河县| 会理县| 怀远县| 淳化县| 沐川县| 满城县| 武定县| 平遥县| 金堂县| 承德县| 泰和县| 苗栗县| 专栏| 青浦区| 抚州市| 桂阳县| 长治市| 阿巴嘎旗| 海城市| 保定市| 芮城县| 屏东县| 阿荣旗| 靖江市| 双城市| 怀安县| 盐津县| 通城县| 本溪市| 墨脱县|