Foros del Web » Programación para mayores de 30 ;) » .NET »

backgroundworker da problemas

Estas en el tema de backgroundworker da problemas en el foro de .NET en Foros del Web. Buenas, os cuento mi problema: tengo un formulario, el cual no dejo que se envíen los datos hasta que todos estén correctos, es decir, con ...
  #1 (permalink)  
Antiguo 23/09/2009, 05:55
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 9 meses
Puntos: 0
backgroundworker da problemas

Buenas,

os cuento mi problema:

tengo un formulario, el cual no dejo que se envíen los datos hasta que todos estén correctos, es decir, con un background worker controlo que el botón "Enviar" esté habilitado o no.

El problema viene cuando cierro el formulario (Volver), si lo abro de nuevo (creo una nueva instancia del formulario), se queda colgao. Creo que es porque no cierro bien el backgroundworker cuando vuelvo a la ventana anterior:

Código C#:
Ver original
  1. // Código del botón Volver
  2. this.Hide(); // Oculto el formulario
  3. backgroundWorker1.CancelAsync();
  4. backgroundWorker1.Dispose();
  5. anterior.Show(); // volvemos a la ventana anterior
  6. anterior.Activate();
  7. this.Close();

Espero que puedan ayudarme. Muchas gracias
  #2 (permalink)  
Antiguo 23/09/2009, 06:14
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: backgroundworker da problemas

Imalvarez, una solucion rapida es poner el control qeu realizas en el background worker, en el propio boton. De manera que si no estan rellenos los datos, cuando presionas el boton salta un mensaje.

Y tengo un pregunta. Como lo haces en el bakgroundworker. porque este no te premite usar el panel con el que está trabajando. Por lo que el boton no se activara si preguntas por cosas de ese panel, no??
  #3 (permalink)  
Antiguo 23/09/2009, 06:25
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: backgroundworker da problemas

Gracias por la ayuda. javi_cassi en respuesta a tu pregunta:

es cierto, no se pueden acceder a controles del formulario desde el método DoWork del backgroundworker, pero sí desde RunWorkerCompleted.

Código C#:
Ver original
  1. private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  2.         {
  3.             while (!backgroundWorker1.CancellationPending)
  4.             {
  5.                 foreach (Control c in this.Controls)
  6.                 {
  7.                     if (errorProvider1.GetError(c).CompareTo("") != 0)
  8.                     {
  9.                         this.buttonModificar.Enabled = false;
  10.                         correcto = false;
  11.                         break;
  12.                     }
  13.                    
  14.                 }
  15.                 if (correcto && textBoxNombreUsuario.Text.CompareTo("") != 0 && textBoxContrasenna.Text.CompareTo("") != 0)
  16.                     buttonModificar.Enabled = true;
  17.                
  18.                 correcto = true;
  19.                 break;
  20.             }
  21.             if (!backgroundWorker1.CancellationPending)
  22.                 backgroundWorker1.RunWorkerAsync();
  23.         }
  #4 (permalink)  
Antiguo 23/09/2009, 06:30
 
Fecha de Ingreso: enero-2008
Mensajes: 268
Antigüedad: 16 años, 4 meses
Puntos: 11
Respuesta: backgroundworker da problemas

Coñe es cierto, jeje. Se me había olvidado. Es lo que tiene manejar el Dowork constantemente.

bueno, te vale la solucon que te comentaba, o quieres que le eche un ojo más de cerca???

saludos, y gracias por la aclaracion
  #5 (permalink)  
Antiguo 23/09/2009, 07:50
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: backgroundworker da problemas

Sí, si que me vale, bueno, voy a intentar hacer lo siguiente:

meter el código del backgroundworker en un método y llamarlo al iniciar el formulario y cada vez que ocurra un Leave de un control.

Muchas gracias

ED: Ahora mucho mejor, simplemente en el leave de cada control desactivo el botón "Enviar" si hay error, y si no, llamo al método que comprueba si los demás controles no tienen error. Ahora ya no se me cuelga el formulario al entrar por segunda vez, me pregunto que estaría haciendo mal con el backgroundworker...

Última edición por lmalvarez; 23/09/2009 a las 10:34
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:36.