★33°空間‰


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

                                 ----智力比知識重要,素質比智力重要,覺悟比素質更重要
          posts - 110,comments - 35,trackbacks - 0

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

          先新建一個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>
          服務器端代碼:
          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()
          ??????? {
          ??????????? //模擬長時間任務
          ??????????? //每個循環模擬任務進行到不同的階段
          ??????????? for(int i=0;i<11;i++)
          ??????????? {
          ??????????????? System.Threading.Thread.Sleep(1000);
          ??????????????? //設置每個階段的state值,用來顯示當前的進度
          ??????????????? Session["State"] = i+1;
          ??????????? }
          ??????????? //任務結束
          ??????????? 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);
          ??????? }
          ??? }
          }


          新建一個進度條頁面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>
          服務器端:
          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) 評論(0)  編輯  收藏 所屬分類: 轉載
          主站蜘蛛池模板: 永善县| 女性| 蕲春县| 阿克| 榆林市| 金华市| 浦北县| 云南省| 河南省| 丹寨县| 太仆寺旗| 盖州市| 凉城县| 容城县| 临沧市| 本溪| 丽江市| 筠连县| 原阳县| 通许县| 门头沟区| 体育| 庄河市| 疏附县| 丹棱县| 乐清市| 泾阳县| 邳州市| 鄂温| 苍南县| 齐河县| 九寨沟县| 乌审旗| 浙江省| 陆良县| 东平县| 会同县| 碌曲县| 洪洞县| 定襄县| 古蔺县|