Il existe de nombreux exemples de barres de progression Web sur Internet, mais beaucoup d'entre eux sont des temps estimés et ne peuvent pas véritablement refléter la progression réelle de la tâche. J'ai combiné le multi-threading et ShowModalDialog pour créer une barre de progression en temps réel. Le principe est très simple : utiliser un thread pour démarrer une tâche à long terme, définir une Session, modifier la valeur de la Session lorsque la tâche passe à différentes étapes. , et utilisez ShowModalDialog pour ouvrir le thread lorsqu'il démarre. Une fenêtre de barre de progression, qui est constamment actualisée pour obtenir la valeur de session et refléter la progression en temps réel. Jetons un coup d'œil au code spécifique : (Téléchargez le code source en fin d'article)
Créez d'abord une nouvelle page Default.aspx,
Code client :
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<br>
<br>
<asp:Button id="Button1" runat="server" Text="Démarrer la tâche longue !"></asp:Button>
</form>
</corps>
Code côté serveur :
utiliser le système ;
en utilisant System.Collections ;
en utilisant System.ComponentModel ;
en utilisant System.Data ;
en utilisant System.Drawing ;
en utilisant System.Web ;
en utilisant System.Web.SessionState ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Text ;
espace de noms WebProgressBar
{
/**//// <résumé>
/// Description récapitulative de _Default.
/// </summary>
classe publique _Default : System.Web.UI.Page
{
protégé System.Web.UI.WebControls.Button Button1 ;
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
// Mettez le code utilisateur pour initialiser la page ici
}
Code généré par Web Form Designer#region Code généré par Web Form Designer
remplacer le void protégé OnInit (EventArgs e)
{
//
// CODEGEN : cet appel est requis par le concepteur de formulaires Web ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <résumé>
/// Méthode requise pour la prise en charge de Designer - ne pas modifier
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
vide privé InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load }
)
#endregion
privé vide LongTask()
{
//Simuler des tâches à long terme
//Chaque tâche de simulation de boucle passe à différentes étapes
pour(int i=0;i<11;i++)
{
Système.Threading.Thread.Sleep(1000);
//Définissez la valeur d'état de chaque étape pour afficher la progression actuelle
Session["État"] = i+1 ;
}
// La tâche se termine
Session["State"] = 100;
}
public static void OpenProgressBar (System.Web.UI.Page Page)
{
StringBuilder sbScript = new StringBuilder();
sbScript.Append("<script langage='JavaScript' type='text/javascript'>n");
sbScript.Append("<!--n");
// Nécessite la prise en charge d'IE5.5 ou supérieur
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; edge: Raised; center: Oui; aide: Non; redimensionnable: Non; statut: Non; défilement: Non ;');n");
//Utilisez window.open sous IE5.5
//sbScript.Append("window.open('Progress.aspx','', 'height=100, width=350, barre d'outils =non, barre de menu=non, barres de défilement=non, redimensionnable=non, emplacement=non, statut =non');n");
sbScript.Append("// -->n");
sbScript.Append("</script>n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
private void Button1_Click (expéditeur d'objet, System.EventArgs e)
{
System.Threading.Thread thread=nouveau System.Threading.Thread(nouveau System.Threading.ThreadStart(LongTask));
thread.Start();
Session["State"]=1;
OpenProgressBar(cette.Page);
}
}
}
Créer une nouvelle page de barre de progression Progress.aspx
Client:
Ajouter <base target="_self"> à la tête
<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="Argent">
<asp:Panel id="panelProgress" runat="server" width="10px" BackColor="Green"></asp:Panel>
</asp:Panneau>
<asp:Label id="lblPercent" runat="server" ForeColor="Blue"></asp:Label>
</form>
</corps>
Côté serveur :
utiliser le système ;
en utilisant System.Collections ;
en utilisant System.ComponentModel ;
en utilisant System.Data ;
en utilisant System.Drawing ;
en utilisant System.Web ;
en utilisant System.Web.SessionState ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.HtmlControls ;
espace de noms WebProgressBar ;
{
/**//// <résumé>
/// Description récapitulative de la progression.
/// </summary>
Progression de la classe publique : System.Web.UI.Page
{
protégé System.Web.UI.WebControls.Label lblMessages ;
protégé System.Web.UI.WebControls.Panel panelProgress ;
protégé System.Web.UI.WebControls.Panel panelBarSide ;
protégé System.Web.UI.WebControls.Label lblPercent ;
état int privé = 0 ;
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
// Mettez le code utilisateur pour initialiser la page ici
si(Session["État"]!=null)
{
state = Convert.ToInt32(Session["State"].ToString());
}
autre
{
Session["État"]=0 ;
}
si(état>0&&état<=10)
{
this.lblMessages.Text = "Entreprise de tâche !";
this.panelProgress.Width = état*30 ;
this.lblPercent.Text = état*10 + "%" ;
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
si(état==100)
{
this.panelProgress.Visible = false;
this.panelBarSide.Visible = false;
this.lblMessages.Text = "Tâche terminée !";
Page.RegisterStartupScript("","<script>window.close();</script>");
}
}
Code généré par Web Form Designer#region Code généré par Web Form Designer
remplacer le void protégé OnInit (EventArgs e)
{
//
// CODEGEN : cet appel est requis par le concepteur de formulaires Web ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <résumé>
/// Méthode requise pour la prise en charge de Designer - ne pas modifier
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
vide privé InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load }
)
#endregion
}
}
Téléchargement du code source : http://justicfu.cnblogs.com/archive/2006/06/29/438433.html