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

backgroundWorker

Estas en el tema de backgroundWorker en el foro de .NET en Foros del Web. Hola, alguien tendra un ejemplo de como usar el componente backgroundWorker tipo Timer, es decir el lugar el Timer usar backgroundWorker, cada cierto tiempo que ...
  #1 (permalink)  
Antiguo 30/09/2008, 09:24
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Pregunta backgroundWorker

Hola, alguien tendra un ejemplo de como usar el componente backgroundWorker tipo Timer, es decir el lugar el Timer usar backgroundWorker, cada cierto tiempo que se ejecute.

estoy trabajando con C# .Net 2005

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #2 (permalink)  
Antiguo 30/09/2008, 09:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

Requieres un timer eso es innevitable pero puedes hacer que cada x tiempo ese timer ejecute un proceso en otro hilo paralelo (con el backgroundworker) y no congelar tu aplicacion.

---

Solo define tu timer en el load de tu forma e inicializalo , establece el manejador de eventos que lanzara a trabajar el bw, en el bw definele los manejadores para cuando reporte avance (si es necesario), inicie trabajo, y complete trabajo. si necesitas refrescar el gui usa el Invoke y listo.ç

Cualquier duda dejas mensaje, pero todo esto como tel o platico lo encuentras en msdn sin problemas.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Última edición por Peterpay; 30/09/2008 a las 09:37
  #3 (permalink)  
Antiguo 30/09/2008, 09:41
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

Sip, eso quiero, pero no conozco este componente y antes de meterme a la investigacion me gustaria saber si alguien tiene algun codigo o algo por el estilo.

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #4 (permalink)  
Antiguo 30/09/2008, 09:51
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

Aqui te pongo un sample pequeño q tenia en mi carpeta de cursos.
Archivo con sample en winforms para el BackgroundWorker
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 30/09/2008, 10:00
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

jajaja en mi trabajo tienen restringido //rapidshare.com porque sera?
pos que hay ahi?
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #6 (permalink)  
Antiguo 30/09/2008, 10:03
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

cual es tu mail y si me deja el hotmail te lo envio.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 30/09/2008, 10:07
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

puedes mandarlo a [email protected]
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #8 (permalink)  
Antiguo 30/09/2008, 10:13
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

ok enviado.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #9 (permalink)  
Antiguo 09/10/2008, 10:27
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: BackgroundWorker

Hola colegas, estoy tratando de usar el componente BackgroundWorker para crear varios hilos porque necesito ejecutar dos procesos a la vez, uno que muestre una progressBar y mandarle el avance y otro que ejecute el proceso que se tarda mucho, tengo esto pero me surgío la duda que posteo al final.

Aqui es donde se invocan los metodos
Código:
private void btnProcesar_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(EjecutaProcesos_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(BarraProgreso);
bw.RunWorkerAsync();
}

Este método disparara el método (válgale la redundancia) que ejecuta el SP de proceso
aquí es donde me falta enviarle el argumento (object) al método BarraProgreso
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
  int porcentaje;

  for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
  {

  int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
  switchProcesos(vProceso);
  BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcentaje));
  porcentaje++; 
  }
}

Código:
private void BarraProgreso(object sender, ProgressChangedEventArgs e)
{

this.prgBarProcesos.Value = e.ProgressPercentage;
}
y por ultimo aquí manejo lo procesos según su ID
Código:
private void switchProcesos(int vProceso)

switch (this.vProceso)
{ 
case 6:
  ActualizaEstatus();
  CargaProcesos();
  break;
 
}

La duda es de cómo enviarle el argumento (object) al método BarraProgreso

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."

Última edición por mvazquez; 09/10/2008 a las 10:34
  #10 (permalink)  
Antiguo 09/10/2008, 13:04
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

ahora entiendo porq preguntabas,

BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcen taje));

no necesitas invocarlo asi

solo haz

((BackgroundWorker)(sender)).ReportProgress(porcen taje);

y listo ya funcionara.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #11 (permalink)  
Antiguo 09/10/2008, 14:22
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

Que onda Mr. Peter, al parecer eres el único moderador de esta sección del foro…

No, no jala Peter, porque me dice que: “Ninguna sobrecarga para el método 'BarraProgreso' acepta '1' argumentos” y es que el método BarraProgreso tiene dos argumentos y yo solo le estoy enviando uno…


Código:
BarraProgreso(((BackgroundWorker)(sender)).ReportProgress(porcentaje));

private void BarraProgreso(object sender, ProgressChangedEventArgs e)
{
   this.prgBarProcesos.Value = e.ProgressPercentage;
}
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #12 (permalink)  
Antiguo 09/10/2008, 14:28
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

no , lo estas haciendo mal y no no soy moderador , para eso esta el lalo q con la chamba se desconecta pero ese es el kbron,

solo reemplaza dentro del for

1.- BarraProgreso(((BackgroundWorker)(sender)).ReportP rogress(porcentaje));
por
2.- ((BackgroundWorker)(sender)).ReportProgress(porcen taje);

y obvio define porcentaje como double o como quieras que sea pero definelo

cuando invocas al report Progress de forma implicita invoca a BarraProgreso tu no lo necesitas invocar.

RECUERDA solo REEMPLAZA LA LINEA 1 POR LA 2
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #13 (permalink)  
Antiguo 09/10/2008, 14:39
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

aaahhh ya, jeje ya entiendo, haré una prueba y te informo, muchas gracias mi estimao Peter............ APRENDE Lalo..!!
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #14 (permalink)  
Antiguo 09/10/2008, 14:41
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

Noooo! si lalo esta bien loco k, y luego se pone peor. jajajaja
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #15 (permalink)  
Antiguo 09/10/2008, 15:35
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

jeje........

Peter cuando uso el BackgroundWorker se empina el rendimiento de la pc, así sin el componente el Uso de PF es de 455 MB y el uso del CPU es de 5% y ya con el componente el Uso de PF sube a 1,56MB y el uso del CPU al 33%, estoy en debug no se si tenga algo que ver eso.

Lo malo es que se hace super lento estooo
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #16 (permalink)  
Antiguo 09/10/2008, 15:43
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

aumentara el uso del procesador porq son n hilos mas pero revisa en modo release tu aplicacion

--

Pon tu codigo como quedo al final.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #17 (permalink)  
Antiguo 09/10/2008, 16:19
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

naa ya me desanimo este famoso componente, ya quite el debug, lo ejecuto y de repente en alguna línea nada especifica, algunas veces en una u en otra me manda al EntryPoint Application.Run(new Procesos.CierreMensual()) y me dice que "Referencia a objeto no establecida como instancia de un objeto."
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #18 (permalink)  
Antiguo 09/10/2008, 16:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

como quedo tu codigo al final, algo puede estar pasando.

no se desanime , por algo estan probados y mas como forma segura de implementar threading.

solo muestranos tu codigo y vemos que tiene al final.

estoy casi seguro que es por esto

Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
  int porcentaje; //Nunca lo inicializas

  for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
  {

  int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
  switchProcesos(vProceso);
  BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcentaje));
  porcentaje++; 
  }
}
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #19 (permalink)  
Antiguo 09/10/2008, 17:34
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

Va....

Código:
private void btnProcesar_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(EjecutaProcesos_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(BarraProgreso);
bw.RunWorkerAsync();
}
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
 int porcentaje = 0;
 for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
 {
 int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
 switchProcesos(vProceso);

  ((BackgroundWorker)(sender)).ReportProgress(porcentaje);
  porcentaje++
 }
 }
Código:
private void BarraProgreso(object sender, ProgressChangedEventArgs e)
{
  this.prgBarProcesos.Value = e.ProgressPercentage;
}
Al entrar a alguno de estos métodos es donde truena con este componente sin el todo funciona bien.
Código:
private void switchProcesos(int idProceso)
{
switch (idProceso)
{
 case 4:
    this.registroMinitor(4);
   Settings.Default.Reporte = "00012";
   this.GeneraProcesoID(); //crea procesID
   this.CartaIncrementoLC(); //ejecuta SP
   this.CrearArchivosPDF("hRptData", "IncrLC.rpt",   _IOHelper.CrearDir("LC"));
  this.actualiza_registro();
 break;
 }
}

este es mi lindo código si tienes dudas comentame.

Gracias brother.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #20 (permalink)  
Antiguo 09/10/2008, 17:48
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

pregunta alguno de tus tantos procesos intenta modificar el gui, al debuggear te marca algun error , la excepción te da mas detalles, probaste poner puntos de debuggeo dentro de cada paso del switch??

probablemente es algo ajeno al componente o que intente modificar el gui y le diga q no es una variable dentro del contexto del hilo actual.

puedes poner el codigo de cada metodo o al menos la generalidad del mismo y ver si estan poniendo alguna actualizacion a un label o aun control.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #21 (permalink)  
Antiguo 09/10/2008, 17:58
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

Si, ya lo probé todo, estaba pensando que ese proceso (EjecutaProcesos_DoWork) no necesito controlarlo, únicamente el ProgressBar, es decir dejar que el proceso que se tarda pos corra libremente y dentro del ciclo enviarle valores de avance al ProgressBar o simplemente ponerlo en visible = true, pero eso si tiene que estar en un hilo porque de otra manera no se muestra hasta que termina todo.

Que os parece?
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #22 (permalink)  
Antiguo 09/10/2008, 18:06
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

no entonces en vez de usar el BW usa el delegado del ejemplo de los delegados que puse y listo y solo pon que muestre y actualice en el mismo ciclo eso si la aplicacion sera inoperante durante ese tiempo.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #23 (permalink)  
Antiguo 09/10/2008, 18:08
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: backgroundWorker

Cuales ejemplos?

ah creo que me lo mandaste por mail...

ah no, no me lo mandaste...
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."

Última edición por mvazquez; 09/10/2008 a las 18:10 Razón: Siempre no:
  #24 (permalink)  
Antiguo 09/10/2008, 18:23
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: backgroundWorker

estan aqui

http://www.forosdelweb.com/f29/appli...events-630929/
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
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 04:17.