Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Multithread n oggetti Background Worker.
martedì 22 luglio 2008 - 18.18
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Barabas
Profilo
| Junior Member
102
messaggi | Data Invio:
mar 22 lug 2008 - 18:18
ho realizzato in VB.NET un'applicazione che compie una operazione lunga (lettura dati da sorgente remota) con un thread separato gestito tramite l'oggetto background worker, senza che l'interfaccia si blocchi in attesa del completamento, e funziona bene.
Era la prima volta che usavo il background worker e ne sono stato molto soddisfatto.
ora è nata l'esigenza di leggere dati da diverse sorgenti, ed il loro numero è variabile...
potrei far leggere i dati da una sorgente alla volta, usando sempre lo stesso oggetto background worker, ma ci metterei troppo tempo (parliamo di più di 12 ore!!!)
non posso creare neanche un background worker per ogni sorgente, perchè non conosco a priori quante ne saranno.
quindi avevo pensato creare a runtime n oggetti background worker ed affidare ad ognuno di loro la gestione di un thread di lettura, ma come faccio poi per utilizzare i metodi che gestiscono gli eventi DoWork, ProgressChangede RunWorkerCompleted ? Non saprei come scrivere la clausola "handles"...
es.
Private Sub XXXXXX_DoWork(ByVal sender As System.Object, ByVal e As DoWorkEventArgs) Handles ??????????.DoWork
al posto dei punti interrogativi " La clausola Handles richiede una variabile WithEvents definita nel tipo che la contiene o in uno dei sui tipi base"...
Potete darmi qualche consiglio?
Grazie in anticipo
Barabas
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 23 lug 2008 - 09:03
Ciao,
devi agganciare l'evento da codice con l'istruzione AddHandler:
http://msdn.microsoft.com/en-us/library/7taxzxka.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Barabas
Profilo
| Junior Member
102
messaggi | Data Invio:
mer 23 lug 2008 - 12:31
Grazie mille!! Ora funziona!!
in passato avevo già usato AddHandler, ma me ne ero completamente dimenticato...
purtroppo però ho dovuto rinunciare alla progress bar per visualizzare il progredire dell'operazione, perchè dava questa eccezione:
- Operazione cross-thread non valida: è stato eseguito l'accesso al controllo 'ReintegrationProgressBar' da un thread diverso da quello da cui è stata eseguita la creazione. -
ed è anche ragionevole dato che tutti i thread lanciati modificavano l'aggiornamento della stessa progress bar...
ho sopperito con una status bar, ma non ha lo stesso effetto "scenografico"...
se ci sono suggerimenti anche per questo sono bene accetti!
grazie ancora
ciao
Barabas
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 23 lug 2008 - 12:50
Se vuoi aggiornare la progress devi agganciare l'evento ProgressChanged del backgroud worker e poi devi utilizzare il metodo ReportProgress all'interno della dowork.
Trovi un esempio qui:
http://msdn.microsoft.com/it-it/library/waw3xexc.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Barabas
Profilo
| Junior Member
102
messaggi | Data Invio:
mer 23 lug 2008 - 15:16
sì questo già l'ho fatto, e prima con un unico thread funzionava, ora che sono diversi va in eccezione...
credo che sia proprio l'accesso alla progress bar da diversi thread a dargli fastidio...
inoltre non sarebbe neanche leggibile... immagina una progress bar che rappresenta l'andamento di diversi thread contemporaneamente... sarebbe un casino...
magari ci vorrebbe qualcosa di diverso dalla progress bar, più adatto a rappresentare l'avanzamento di molteplici processi...
ma non saprei cosa...
Barabas
rossimarko
Profilo
| Guru
1.173
messaggi | Data Invio:
mer 23 lug 2008 - 15:23
Dovresti creare n progress, oppure ti suggerisco un'altra possibilità.
Inserisci una griglia che viene popolata da una tua collection o datatable. Questa datatable conterrà una riga per ogni processo che sta girando e all'interno della riga ti salverai un identificatore che ti indica il processo e un valore numerico che ti indica lo stato di avanzamento. L'utente vedrebbe per ogni processo la percentuale di avanzamento.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
Barabas
Profilo
| Junior Member
102
messaggi | Data Invio:
mer 23 lug 2008 - 16:11
mmmm....la griglia forse può andare... ora ci provo
grazie
Barabas
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !