Es gibt viele Beispiele für Web-Fortschrittsbalken im Internet, aber viele davon sind geschätzte Zeiten und können den tatsächlichen Fortschritt der Aufgabe nicht wirklich widerspiegeln. Ich habe Multithreading und ShowModalDialog kombiniert, um einen Echtzeit-Fortschrittsbalken zu erstellen. Das Prinzip ist sehr einfach: Verwenden Sie einen Thread, um eine Langzeitaufgabe zu starten, definieren Sie eine Sitzung und ändern Sie den Wert der Sitzung, wenn die Aufgabe in verschiedene Phasen übergeht , und verwenden Sie ShowModalDialog, um den Thread beim Start zu öffnen. Ein Fortschrittsbalkenfenster, das ständig aktualisiert wird, um den Sitzungswert zu erhalten und den Fortschritt in Echtzeit anzuzeigen. Werfen wir einen Blick auf den spezifischen Code: (Laden Sie den Quellcode am Ende des Artikels herunter)
Erstellen Sie zunächst eine neue Default.aspx-Seite.
Clientcode:
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<br>
<br>
<asp:Button id="Button1" runat="server" Text="Lange Aufgabe starten!"></asp:Button>
</form>
</body>
Serverseitiger Code:
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Web;
using System.Web.SessionState;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
mit System.Text;
Namespace WebProgressBar
{
/**//// <Zusammenfassung>
/// Zusammenfassende Beschreibung für _Default.
/// </summary>
öffentliche Klasse _Default: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// Geben Sie hier den Benutzercode ein, um die Seite zu initialisieren
}
Vom Web Form Designer generierter Code#region Vom Web Form Designer generierter Code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Dieser Aufruf wird vom ASP.NET Web Form Designer benötigt.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <Zusammenfassung>
/// Erforderliche Methode für Designer-Unterstützung – nicht ändern
/// den Inhalt dieser Methode mit dem 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()
{
//Simulieren Sie langfristige Aufgaben
//Jede Schleifensimulationsaufgabe durchläuft verschiedene Phasen
for(int i=0;i<11;i++)
{
System.Threading.Thread.Sleep(1000);
//Legen Sie den Statuswert jeder Phase fest, um den aktuellen Fortschritt anzuzeigen
Session["State"] = i+1;
}
//Aufgabe endet
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");
//Erfordert IE5.5 oder höher-Unterstützung
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; Rand: Erhöht; Mitte: Ja; Hilfe: Nein; Größenänderung: Nein; Status: Nein; Scrollen: Nein ;');N");
//Fenster.open unter IE5.5 verwenden
//sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status =nein');n");
sbScript.Append("// -->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);
}
}
}
Erstellen Sie eine neue Fortschrittsbalkenseite Progress.aspx
Kunde:
Fügen Sie <base target="_self"> zum Kopf hinzu
<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" Breite="300px" BorderStyle="Solid" BorderWidth="1px"
ForeColor="Silber">
<asp:Panel id="panelProgress" runat="server" Breite="10px" BackColor="Green"></asp:Panel>
</asp:Panel>
<asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
</form>
</body>
Serverseite:
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Web;
using System.Web.SessionState;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
Namespace WebProgressBar
{
/**//// <Zusammenfassung>
/// Zusammenfassende Beschreibung für Fortschritt.
/// </summary>
öffentliche Klasse Fortschritt: 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;
privater int-Zustand = 0;
private void Page_Load(object sender, System.EventArgs e)
{
// Geben Sie hier den Benutzercode ein, um die Seite zu initialisieren
if(Session["State"]!=null)
{
state = Convert.ToInt32(Session["State"].ToString());
}
anders
{
Sitzung["Status"]=0;
}
if(state>0&&state<=10)
{
this.lblMessages.Text = "Aufgabe übernehmen!";
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 = "Aufgabe abgeschlossen!";
Page.RegisterStartupScript("","<script>window.close();</script>");
}
}
Vom Web Form Designer generierter Code#region Vom Web Form Designer generierter Code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Dieser Aufruf wird vom ASP.NET Web Form Designer benötigt.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <Zusammenfassung>
/// Erforderliche Methode für Designer-Unterstützung – nicht ändern
/// den Inhalt dieser Methode mit dem Code-Editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Download des Quellcodes: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html