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.
| ||||
![]() 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." |
| ||||
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." |
| ||||
Respuesta: backgroundWorker Aqui te pongo un sample pequeño q tenia en mi carpeta de cursos. Archivo con sample en winforms para el BackgroundWorker |
| ||||
Respuesta: backgroundWorker ![]() 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." |
| ||||
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." |
| ||||
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:
y por ultimo aquí manejo lo procesos según su IDprivate void BarraProgreso(object sender, ProgressChangedEventArgs e) { this.prgBarProcesos.Value = e.ProgressPercentage; }
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 |
| ||||
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. |
| ||||
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." |
| ||||
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 |
| ||||
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." |
| ||||
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." |
| ||||
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. |
| ||||
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." |
| ||||
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++; } } |
| ||||
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:
Al entrar a alguno de estos métodos es donde truena con este componente sin el todo funciona bien.private void BarraProgreso(object sender, ProgressChangedEventArgs e) { this.prgBarProcesos.Value = e.ProgressPercentage; }
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." |
| ||||
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. |
| ||||
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." |
| ||||
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. |
| ||||
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: |