Noticias Weblogs Foros Wiki Código

RecorteX

310 usuarios y 202 recortes de código
Usuario

Contraseña
Crear cuenta
asp csharp css fechas fichero Flash html imagenes java javascript linux mysql oracle php ruby sql SQLServer vbnet xhtml xml
Top Usuarios
albin (29)
josuebasurto (28)
fjmp76 (27)
juanjo (25)
pedrocaro (9)
AndiXTRM (7)
Joserra (7)
miiglesi (6)
aplyca (5)
moisesmarquez (5)
Top Etiquetas
php (38)
html (23)
javascript (20)
vbnet (20)
java (19)
sql (15)
mysql (13)
csharp (12)
xml (10)
css (8)
imagenes (7)
Flash (7)
xhtml (6)
asp (6)
linux (6)
fechas (6)
SQLServer (5)
oracle (5)
fichero (4)
ruby (4)

Splash con operación larga en inicio

Si al arrancar tu aplicación tienes que hacer una operación que puede tardar varios minutos puede llegar a desesperar al usuario.
Para eso se supone que se inventaron las ventanas de splash. Sin embargo, si en esa ventana de splash quieres poner una imagen animada, una barra de progreso o cualquier otra cosa para demostrar al usuario que no se le ha colgado la aplicación hay que dar un pequeño rodeo. Al menos es la mejor forma que he encontrado. De cualquier otra forma, mostraremos un bonito rectángulo gris que no dará demasiada buena imagen de lo que hemos hecho.

Primero creo una clase que encapsulará el trabajo con la ventana de splash.

public class GestionVentana
{
   Progreso progreso;
   InvConf.Configuracion conf;

   public GestionVentana (ref InvConf.Configuracion conf, ref Progreso progreso)
   {
      this.conf = conf;
      this.progreso = progreso;
   }

   public void bw_RunWorkerCompleted (object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
   {
      this.progreso.Hide ();
   }

   public void bw_DoWork (object sender, System.ComponentModel.DoWorkEventArgs e)
   {
      // Esta es la función que tarda varios minutos
      this.conf.procesarEquipo ();
   }
}
Y después en el método principal debemos insertar algo como esto:

System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker ();

GestionVentana gv = new GestionVentana (ref conf, ref progreso);
bw.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler
   (gv.bw_RunWorkerCompleted);
bw.DoWork += new System.ComponentModel.DoWorkEventHandler (gv.bw_DoWork);
bw.RunWorkerAsync ();

while (bw.IsBusy)
{
   // O cualquier otra actualización en la interfaz que queramos realizar.
   Application.DoEvents ();
}
Identifícate para dejar un comentario.
info@recortex.com - Proyecto: Juanjo Navarro, 2006 - Diseño: Albin