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.
| ||||
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." |
| ||||
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 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." |
| ||||
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: |