มีตัวอย่างแถบความคืบหน้าของเว็บมากมายบนอินเทอร์เน็ต แต่หลายตัวอย่างเป็นเพียงเวลาโดยประมาณ และไม่สามารถสะท้อนถึงความคืบหน้าที่แท้จริงของงานได้อย่างแท้จริง ฉันรวมมัลติเธรดและ ShowModalDialog เพื่อสร้างแถบความคืบหน้าแบบเรียลไทม์ หลักการง่ายมาก: ใช้เธรดเพื่อเริ่มงานระยะยาว กำหนดเซสชัน เปลี่ยนค่าของเซสชันเมื่องานดำเนินไปสู่ขั้นตอนต่างๆ และใช้ ShowModalDialog เพื่อเปิดเธรดเมื่อเริ่มต้น หน้าต่างแถบความคืบหน้าซึ่งได้รับการรีเฟรชอย่างต่อเนื่องเพื่อรับค่าเซสชันและสะท้อนถึงความคืบหน้าแบบเรียลไทม์ มาดูโค้ดเฉพาะกัน: (ดาวน์โหลดซอร์สโค้ดท้ายบทความ)
ขั้นแรกให้สร้างเพจ Default.aspx ใหม่
รหัสไคลเอ็นต์:
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<br>
<br>
<asp:Button id="Button1" runat="server" Text="เริ่มงานแบบยาว!"></asp:Button>
</แบบฟอร์ม>
</ร่างกาย>
รหัสฝั่งเซิร์ฟเวอร์:
ใช้ระบบ;
ใช้ System.Collections;
โดยใช้ System.ComponentModel;
ใช้ System.Data;
โดยใช้ระบบการวาดภาพ;
ใช้ System.Web;
โดยใช้ System.Web.SessionState;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.HtmlControls;
ใช้ System.Text;
เนมสเปซ WebProgressBar
-
/***////// <สรุป>
/// คำอธิบายโดยสรุปสำหรับ _Default
/// </สรุป>
คลาสสาธารณะ _Default : System.Web.UI.Page
-
ป้องกัน System.Web.UI.WebControls.Button Button1;
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
// ใส่รหัสผู้ใช้เพื่อเริ่มต้นเพจที่นี่
}
Web Form Designer สร้างโค้ด#ภูมิภาค โค้ดที่สร้างโดย Web Form Designer
แทนที่การป้องกันโมฆะ OnInit (EventArgs e)
-
-
// CODEGEN: การเรียกนี้จำเป็นโดย ASP.NET Web Form Designer
-
เตรียมใช้งานส่วนประกอบ();
ฐาน OnInit(e);
-
/***////// <สรุป>
/// วิธีการที่จำเป็นสำหรับการสนับสนุน Designer - ห้ามแก้ไข
/// เนื้อหาของวิธีนี้ด้วยโปรแกรมแก้ไขโค้ด
/// </สรุป>
โมฆะส่วนตัว InitializeComponent()
-
this.Button1.Click += System.EventHandler ใหม่ (this.Button1_Click);
this.Load += ใหม่ System.EventHandler(this.Page_Load);
}
#endregion
โมฆะส่วนตัว LongTask()
-
//จำลองงานระยะยาว
//แต่ละงานการจำลองลูปจะดำเนินต่อไปยังขั้นตอนที่ต่างกัน
สำหรับ(int i=0;i<11;i++)
-
System.Threading.Thread.Sleep (1,000);
//ตั้งค่าสถานะของแต่ละขั้นตอนเพื่อแสดงความคืบหน้าในปัจจุบัน
เซสชัน["สถานะ"] = i+1;
-
//ภารกิจจบลง
เซสชัน ["สถานะ"] = 100;
}
โมฆะสาธารณะ OpenProgressBar (หน้า System.Web.UI.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; dialWidth: 350px; edge: Raised; center: Yes; help: No; ปรับขนาดได้: No; สถานะ: No; scroll:No ;');n");
//ใช้ window.open ด้านล่าง IE5.5
//sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, ปรับขนาดได้=no, location=no, status =ไม่');n");
sbScript.Append("// -->n");
sbScript.Append("</script>n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
โมฆะส่วนตัว Button1_Click (ผู้ส่งวัตถุ System.EventArgs e)
-
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
thread.Start();
เซสชัน ["สถานะ"]=1;
OpenProgressBar(หน้านี้);
-
-
-
สร้างหน้าแถบความคืบหน้าใหม่ Progress.aspx
ลูกค้า:
เพิ่ม <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="สีเงิน">
<asp:Panel id="panelProgress" runat="server" width="10px" BackColor="สีเขียว"></asp:แผง>
</asp:แผง>
<asp:Label id="lblPercent" runat="server" ForeColor="สีน้ำเงิน"></asp:Label>
</แบบฟอร์ม>
</ร่างกาย>
ฝั่งเซิร์ฟเวอร์:
ใช้ระบบ;
ใช้ System.Collections;
โดยใช้ System.ComponentModel;
ใช้ System.Data;
โดยใช้ระบบการวาดภาพ;
ใช้ System.Web;
โดยใช้ System.Web.SessionState;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.HtmlControls
เนมสเปซ WebProgressBar
-
/***////// <สรุป>
/// คำอธิบายโดยย่อสำหรับความคืบหน้า
/// </สรุป>
ความคืบหน้าคลาสสาธารณะ : System.Web.UI.Page
-
ป้องกัน System.Web.UI.WebControls.Label lblMessages;
ป้องกัน System.Web.UI.WebControls.Panel panelProgress;
ป้องกัน System.Web.UI.WebControls.Panel แผง BarSide;
ป้องกัน System.Web.UI.WebControls.Label lblPercent;
สถานะ int ส่วนตัว = 0;
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
// ใส่รหัสผู้ใช้เพื่อเริ่มต้นเพจที่นี่
ถ้า (เซสชัน ["สถานะ"]!=null)
-
state = Convert.ToInt32 (เซสชัน ["สถานะ"].ToString ());
-
อื่น
-
เซสชัน["สถานะ"]=0;
-
ถ้า(สถานะ>0&&สถานะ<=10)
-
this.lblMessages.Text = "ดำเนินการงาน!";
this.panelProgress.Width = สถานะ * 30;
this.lblPercent.Text = สถานะ*10 + "%";
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
-
ถ้า (สถานะ==100)
-
this.panelProgress.Visible = เท็จ;
this.panelBarSide.Visible = เท็จ;
this.lblMessages.Text = "งานเสร็จสิ้นแล้ว!";
Page.RegisterStartupScript("","<script>window.close();</script>");
-
}
Web Form Designer สร้างโค้ด#ภูมิภาค โค้ดที่สร้างโดย Web Form Designer
แทนที่การป้องกันโมฆะ OnInit (EventArgs e)
-
-
// CODEGEN: การเรียกนี้จำเป็นโดย ASP.NET Web Form Designer
-
เตรียมใช้งานส่วนประกอบ();
ฐาน OnInit(e);
-
/***////// <สรุป>
/// วิธีการที่จำเป็นสำหรับการสนับสนุน Designer - ห้ามแก้ไข
/// เนื้อหาของวิธีนี้ด้วยโปรแกรมแก้ไขโค้ด
/// </สรุป>
โมฆะส่วนตัว InitializeComponent()
-
this.Load += ใหม่ System.EventHandler(this.Page_Load);
}
#ภูมิภาคสุดท้าย
-
-
ดาวน์โหลดซอร์สโค้ด: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html