2011-12-02 19 views
6

Estoy usando la aplicación de ventana y C# .. tengo una imagen que es invisible al inicio de la aplicación .. cuando se hace clic en algún botón, el cuadro de imagen debe ser se muestra ..La propiedad visible de PictureBox no funciona ... ayuda

i utilizar esta codificación, pero el cuadro de imagen no es visible

private void save_click(object sender, EventArgs e) 

{ 

     pictureBox1.Visible = true; 
     pictureBox1.Show(); 

     //does the work here 
     //storing and retreiving values from datadase 

    pictureBox1.Visible = false; 
    pictureBox1.Hide(); 
} 

PS .. en el cuadro de imagen estoy mostrando un gif .. por lo que el usuario sabrá que algo de trabajo está pasando en el fondo .. Tardará mucho tiempo para que la función termine ...

Respuesta

5

Suponiendo que el guardado en la base de datos lleva algo de tiempo, debe hacerlo de manera asincrónica utilizando BackgroundWorker, ocultando su PictureBox una vez que la operación finalice. El motivo por el que la imagen no se muestra actualmente se debe a que mientras se está ejecutando la operación de almacenamiento de larga ejecución, los mensajes de Windows no se procesan y, por lo tanto, su formulario no responderá a las entradas del usuario y no se volverán a pintar. Cuando finaliza la operación de guardado y los mensajes comienzan a procesarse nuevamente, el cuadro de imagen ya se ha ocultado nuevamente.

1

Su cuadro de imagen no se mostrará porque está ejecutando otras operaciones en el subproceso de la interfaz de usuario durante el tiempo que desea que se muestre el cuadro de imagen. La interfaz de usuario no se volverá a pintar (mostrando el cuadro de la imagen) hasta que el hilo de la interfaz de usuario se vuelva libre, es decir, después de su método.

Para superar esto, primero tiene que mostrar el cuadro de imagen, luego disparar un hilo para ejecutar sus operaciones (esto permitirá que WinForms continúe interactuando y pintando la interfaz de usuario), luego termine con una llamada al UI hilo para ocultar el cuadro de imagen.

Consulte este StackOverflow Question para obtener ayuda sobre este proceso de ejecución multiproceso.

2

Para evitar el uso de múltiples hilos, lo único que puede hacer es pictureBox1.Refresh();pictureBox1.Visible = true; después de la siguiente manera:

private void save_click(object sender, EventArgs e) 
{ 
    pictureBox1.Visible = true; 
    pictureBox1.Refresh(); 

    //does the work here 
    //storing and retreiving values from datadase 

     pictureBox1.Visible = false; 
} 
Cuestiones relacionadas