C sharp - No bloquear el hilo UI

 
Vista:
sin imagen de perfil
Val: 14
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

No bloquear el hilo UI

Publicado por Pinta (6 intervenciones) el 24/09/2020 13:28:29
Hola a todos,

Estoy desarrollando una aplicación donde añado distintas fechas en un panel.

Las fechas las obtengo por un método asíncrono y luego mediante un foreach añado las fechas a un layoutpanel

1
2
3
4
5
6
7
8
9
10
espera.visible=true;
 
var fechas = await SelectFechasTipoAsync(entity, idEntity);
 
foreach (var fecha in fechas)
   {
        panelLayoutFechas.Controls.Add(new CtrlFecha(fecha) { BackColor = blanco ? Color.White : SystemColors.Control });
   }
 
espera.visible=false;

El problema que tengo es que quiero mostrar una imagen animada mientras realiza la tarea y cuando llega al foreach se para la animacion puesto que bloquea el hilo ui.

Gracias por aticipado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No bloquear el hilo UI

Publicado por Nacho (115 intervenciones) el 24/09/2020 16:38:08
Pon la imagen animada en otro hilo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

No bloquear el hilo UI

Publicado por Pinta (6 intervenciones) el 24/09/2020 17:02:40
Y como puedo hacer eso??

La imagen la tengo en un panel del formulario principal.

S2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No bloquear el hilo UI

Publicado por Nacho (115 intervenciones) el 24/09/2020 19:48:14
Es crear un hilo que llame a una función que cambie la imagen. Como no se puede acceder a un control de un hilo desde otro directamente, la función que cambie la imagen tiene que ser algo como
1
2
3
4
5
6
7
8
9
10
11
12
13
14
delegate void SetControlImagen(Control control, Image image);
 
private void PonerImagen(Control control, Image imagen)
{
     if (((Panel)control).InvokeRequired)
     {
           SetControlImagen d = new SetControlImagen(PonerImagen);
           this.Invoke(d, new object[] { control, imagen });
     }
     else
     {
           control.BackgroundImage= imagen;
     }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 14
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

No bloquear el hilo UI

Publicado por Pinta (6 intervenciones) el 25/09/2020 08:33:28
Hola gracias por tu respuesta.

Sigue sin mostrar la animación. Cuando se ejecuta el foreach como es desde la UI se congela la imagen.

S2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No bloquear el hilo UI

Publicado por Nacho (115 intervenciones) el 25/09/2020 14:27:44
Claro, el foreach tiene que ir en el thread. No se puede tener una función de un hilo que lee mensajes ejecutándose el tiempo que sea. Eso se pone en un hilo que no lea mensajes ni nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar