Hay muchos ejemplos de barras de progreso web en Internet, pero muchos de ellos son tiempos estimados y no pueden reflejar verdaderamente el progreso real de la tarea. Combiné subprocesos múltiples y ShowModalDialog para crear una barra de progreso en tiempo real. El principio es muy simple: use un subproceso para iniciar una tarea a largo plazo, defina una sesión, cambie el valor de la sesión cuando la tarea avance a diferentes etapas. y use ShowModalDialog para abrir el hilo cuando se inicia. Una ventana de barra de progreso, que se actualiza constantemente para obtener el valor de la sesión y reflejar el progreso en tiempo real. Echemos un vistazo al código específico: (Descargue el código fuente al final del artículo)
Primero cree una nueva página Default.aspx,
Código de cliente:
<body MS_POSITIONING="GridLayout">
<id de formulario="Form1" método="publicación" runat="servidor">
<br>
<br>
<asp:Button id="Botón1" runat="servidor" Text="¡Iniciar tarea larga!"></asp:Button>
</formulario>
</cuerpo>
Código del lado del servidor:
usando Sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Web;
usando System.Web.SessionState;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
usando System.Text
espacio de nombres WebProgressBar;
{
/**//// <resumen>
/// Descripción resumida de _Default.
/// </summary>
clase pública _Default: System.Web.UI.Page
{
protegido System.Web.UI.WebControls.Button Button1;
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
// Pon el código de usuario para inicializar la página aquí
}
Código generado por Web Form Designer#región Código generado por Web Form Designer
anular el vacío protegido OnInit (EventArgs e)
{
//
// CODEGEN: Esta llamada es requerida por el Diseñador de formularios web ASP.NET.
//
InicializarComponente();
base.OnInit(e);
}
/**//// <resumen>
/// Método requerido para la compatibilidad con Designer: no modificar
/// el contenido de este método con el editor de código.
/// </summary>
vacío privado InicializarComponente()
{
this.Button1.Click += nuevo System.EventHandler(this.Button1_Click);
this.Load += nuevo System.EventHandler(this.Page_Load)
;
#endregion
privada vacía LongTask()
{
// Simular tareas a largo plazo
//Cada tarea de simulación de bucle pasa a diferentes etapas
para(int i=0;i<11;i++)
{
Sistema.Threading.Thread.Sleep(1000);
//Establece el valor de estado de cada etapa para mostrar el progreso actual
Sesión["Estado"] = i+1;
}
//La tarea finaliza
Sesión["Estado"] = 100;
}
OpenProgressBar vacío estático público (Página System.Web.UI.Page)
{
StringBuilder sbScript = new StringBuilder();
sbScript.Append("<lenguaje de script='JavaScript' tipo='text/javascript'>n");
sbScript.Append("<!--n");
//Requiere soporte IE5.5 o superior
sbScript.Append("window.showModalDialog('Progress.aspx','','dialogHeight: 100px; dialogWidth: 350px; borde: elevado; centro: sí; ayuda: no; redimensionable: no; estado: no; desplazamiento: no ;');norte");
//Usa window.open debajo de IE5.5
//sbScript.Append("window.open('Progress.aspx','', 'altura=100, ancho=350, barra de herramientas =no, barra de menú=no, barras de desplazamiento=no, redimensionable=no, ubicación=no, estado =no');n");
sbScript.Append("// -->n");
sbScript.Append("</script>n");
Page.RegisterClientScriptBlock("OpenProgressBar", sbScript.ToString());
}
botón vacío privado1_Click (remitente del objeto, System.EventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(LongTask));
thread.Start();
Sesión["Estado"]=1;
OpenProgressBar(esta.Página);
}
}
}
Crear una nueva página de barra de progreso Progress.aspx
Cliente:
Agregue <base target="_self"> al encabezado
<cuerpo MS_POSITIONING="GridLayout">
<id de formulario="Form1" método="publicación" runat="servidor">
<asp:Label id="lblMessages" runat="servidor"></asp:Label>
<asp:Panel id="panelBarSide" runat="servidor" Ancho="300px" BorderStyle="Sólido" BorderWidth="1px"
ForeColor="Plata">
<asp:Panel id="panelProgress" runat="servidor" Ancho="10px" BackColor="Verde"></asp:Panel>
</asp:Panel>
<asp:Label id="lblPercent" runat="servidor" ForeColor="Azul"></asp:Label>
</formulario>
</cuerpo>
Lado del servidor:
usando Sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Web;
usando System.Web.SessionState;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls
espacio de nombres WebProgressBar
;
{
/**//// <resumen>
/// Descripción resumida del progreso.
/// </summary>
Progreso de clase pública: System.Web.UI.Page
{
protegido System.Web.UI.WebControls.Label lblMessages;
protegido System.Web.UI.WebControls.Panel panelProgress;
protegido System.Web.UI.WebControls.Panel panelBarSide;
protegido System.Web.UI.WebControls.Label lblPercent;
estado int privado = 0;
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
// Pon el código de usuario para inicializar la página aquí
if(Sesión["Estado"]!=nulo)
{
estado = Convert.ToInt32(Session["Estado"].ToString());
}
demás
{
Sesión["Estado"]=0;
}
si(estado>0&&estado<=10)
{
this.lblMessages.Text = "¡Tarea realizada!";
this.panelProgress.Width = estado*30;
this.lblPercent.Text = estado*10 + "%";
Page.RegisterStartupScript("","<script>window.setTimeout('window.Form1.submit()',100);</script>");
}
si(estado==100)
{
this.panelProgress.Visible = falso;
this.panelBarSide.Visible = falso;
this.lblMessages.Text = "¡Tarea completada!";
Page.RegisterStartupScript("","<script>ventana.close();</script>");
}
}
Código generado por Web Form Designer#región Código generado por Web Form Designer
anular el vacío protegido OnInit (EventArgs e)
{
//
// CODEGEN: Esta llamada es requerida por el Diseñador de formularios web ASP.NET.
//
InicializarComponente();
base.OnInit(e);
}
/**//// <resumen>
/// Método requerido para la compatibilidad con Designer: no modificar
/// el contenido de este método con el editor de código.
/// </summary>
vacío privado InicializarComponente()
{
this.Load += nuevo System.EventHandler(this.Page_Load)
;
#regiónfinal
}
}
Descarga del código fuente: http://justicfu.cnblogs.com/archive/2006/06/29/438433.html