Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2008, 06:44
chcma
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
WPF Hebras y Entorno gráfico y demás historias...

Buenos días foreros desde Spain !!!

Bueno, ahi va otra pregunta de WPF.

Tengo un botón, que cuando lo pulso, pone en marcha una animación que oculta unos controles y muestra un progress bar, todo esto através de XAML.


Sin embargo, este botón, además de empezar el StoryBoard, quiero que haga una serie de operaciónes en el CodeBehind, que es conectarse a una BD, recoger datos y conectarse a un servidor.


Bien, la aplicación funciona perfectamente. Menos en el efecto visual, ya uqe cuando empiezo a conectarme a la BD, y al servidor la barra de progreso se para, como si fuese todo sincrono. Sin embargo, para la ejecución de la BD y demás lo hice através de una hebra.

¿No debería de estar ejecutándose la animación mientras se ejecuta lo demás?, ¿Por que se queda parada la barra de progreso durante la ejecución del code-behind?

NOTA: La barra de progreso está marcada como de tipo "Indefinido", por lo que no la tengo que estar actualizando con el .Value, sino que se muestra constantenmente en movimiento, excepto cuando se empieza la ejecución del code-behind.

Parte de mi code-behind es el siguiente:
Código:
        private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            
            Thread objHebra = new Thread(new ThreadStart(RealizarLogin));
            objHebra.Start();
        }


        private void RealizarLogin()
        {
            this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate
            {
                objUsuarioLogado = new ClsInformacionUsuario();
                objNegocio.HazLogin(txtLogin.Text, txtClave.Text, objUsuarioLogado);

                if (objUsuarioLogado.CodigoUsuario == -1)
                {

                    Clases.ClsAnimaciones.PlayAnimacion(this, "OnMouseLeftButtonDownbtnLogin_Reverse");
                    MessageBox.Show("Usuario o clave incorrecta", "Error login", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                RecuperarContactos();
            });
        }


        private void RecuperarContactos()
        {
            this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate
            {
                if (!objNegocio.DameContactos(txtLogin.Text, txtClave.Text))
                {

                    Clases.ClsAnimaciones.PlayAnimacion(this, "OnMouseLeftButtonDownbtnLogin_Reverse");
                    MessageBox.Show("No se ha podido recuperar la lista de usuarios", "Error en contactos", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                RealizarConexion();
            });
        }
En fin... creo que con esa Hebra ya debería ser suficiente ¿No?, también probé a ponerle la propiedad IsBackground=True, pero nada....
__________________
Charlie.