Título: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Eleкtro en 20 Diciembre 2012, 14:05 pm Es la primera vez que pruebo a hacer esto y no se que error estoy comentiendo...
Por un lado tengo la class principal (Form1) Por otro lado tengo una class para un backgroundworker Al usar delegados desde la segunda class para modificar la propiedad de un control de la class principal no sucede nada, la propiedad se modifica pero el control no se actualiza visualmente hablando en el form... es decir, ni el label ni la progressbar cambian de estado :¬¬ class principal.vb : Código
class del backgroundworker.vb : Código
Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Novlucker en 20 Diciembre 2012, 14:23 pm Desde el DoWork debes de invocar al método ReportProgress. Luego desde el evento ProgressChanged del BackgroundWorker realizas las modificaciones necesarias.
http://msdn.microsoft.com/es-es/library/system.componentmodel.backgroundworker.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2 Saludos Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Eleкtro en 20 Diciembre 2012, 15:56 pm Vale Nov, lo he intentado así
Código
Código
Problema: Sigue sin actualizarse el label (ni cualquier otro elemento al que llame, como la barra de progreso por ejemplo vaya) :¬¬ :¬¬ :¬¬ Ni con un refresh() puedo. EDITO: El label se actualiza cuando el hilo se completa (cuando sucede el evento del workercompleted), asi que me imagino que el culpable es el FOR?, ¿Como puedo solucionarlo? PD: No creo que séa problema del delegado porque si compruebo el valor con un msgbox(PlayLists.Form1.progresslabel.txt) veo que el valor es correcto Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Keyen Night en 20 Diciembre 2012, 19:38 pm Cuando realizas operaciones asincrónicas normalmente no solo es una ProgressBar la que advierte cambios a veces tenemos Label que muestran información y otros controles los cuales necesitamos modificar mientras la operación va avanzando, la forma más sencilla es usar el segundo parámetro del método ReportProgress, este es UserState, puedes crear una estructura que almacene todos los datos que necesitas pasarle al evento ProgressChanged el los recibe a través de e.UserState, es bastante sencillo y cómodo ;)
Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: spiritdead en 20 Diciembre 2012, 19:41 pm Es la primera vez que pruebo a hacer esto y no se que error estoy comentiendo... Por un lado tengo la class principal (Form1) Por otro lado tengo una class para un backgroundworker Al usar delegados desde la segunda class para modificar la propiedad de un control de la class principal no sucede nada, la propiedad se modifica pero el control no se actualiza visualmente hablando en el form... es decir, ni el label ni la progressbar cambian de estado :¬¬ class principal.vb : Código
class del backgroundworker.vb : Código
no uses backgroundworker con delegados ... usa threads Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Eleкtro en 21 Diciembre 2012, 06:52 am no uses backgroundworker con delegados ... usa threads Si eso está muy bien pero... todos sabemos que un "System.Threading.Thread" sólamente se puede iniciar una vez, He leido que para poder ejecutar el mismo thread infinitas veces solo hay que resetear la variable de la instancia del thread, osea crear una nueva instancia de "System.Threading.Thread" que llame al mismo thread Por ejemplo: Código
No sé si lo hice bien, donde leí la solución para ejecutar el mismo thread las veces que uno quiera no había ningún ejemplo, pero en caso de que el ejemplo que he dado séa correcto entonces necesito encontrar la manera de que el nombre de la variable se cree automáticamente para poder llamarlo las veces que séa necesario... Necesitaría algo así: Código
Está claro que mi intento de randomizar la variable de la instancia no funciona, ¿Me pueden ayudar a hacerlo? Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: spiritdead en 21 Diciembre 2012, 06:58 am Si eso está muy bien pero... todos sabemos que un "System.Threading.Thread" sólamente se puede iniciar una vez, al terminar el ciclo del thread no podras reiniciarlo, por lo que debes liberarlo y crear 1 nueva instancia usando el "new"He leido que para poder ejecutar el mismo thread infinitas veces solo hay que resetear la variable de la instancia del thread, osea crear una nueva instancia de "System.Threading.Thread" que llame al mismo thread Por ejemplo: Código
No sé si lo hice bien, donde leí la solución para ejecutar el mismo thread las veces que uno quiera no había ningún ejemplo, pero en caso de que el ejemplo que he dado séa correcto entonces necesito encontrar la manera de que el nombre de la variable se cree automáticamente para poder llamarlo las veces que séa necesario... Necesitaría algo así: Código
Está claro que mi intento de randomizar la variable de la instancia no funciona, ¿Me pueden ayudar a hacerlo? Dim T_first_instance As System.Threading.Thread = New Threading.Thread(AddressOf MITHREAD) despues que trabaje simplemente harias T_first_instance = new thread(addressOF sub/function) y vuelves a arrancarlo ;) y de usarles claro q se puede, :) pronto te mostrare mi motor FTP, con soporte multi-descargas paralelas que trabaja con 1 hilo monitor y de 2-4 hilos auxiliares 1 para cada descarga o subida para subidas y descargas paralelas Título: Re: Los controles de la class principal no se actualizan con delegados... :-/ Publicado por: Eleкtro en 21 Diciembre 2012, 07:11 am despues que trabaje simplemente harias T_first_instance = new thread(addressOF sub/function) y vuelves a arrancarlo ;) uf, perfecto lo conseguí, esto me va a ahorrar mucha comida de coco, gracias !! Código
PD: Realmente no encontraba información sobre como ejecutar el mismo thread una vez "ha muerto". |