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
Sincronizzare la chiamata invoke oppure dei thread
domenica 15 gennaio 2006 - 01.40
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
dom 15 gen 2006 - 01:40
Ragazzi,
vi spiego subito il mio problema...
ho una listview nella vengono aggiornati degli item in base a delle operazioni che avvengono in una for..next...tutto questo lo faccio eseguire in un thread richiamandolo una il metodo invoke delegate...esempio:
Public Delegate sub thr1()
Dim prova As New thr1(AddressOf lista)
Me.listView1.Invoke(prova)
Private sub Lista()
For idlista = 0 To Me.ListView3.Items.Count - 1
Me.ListView3.Items(idlista).Selected = True
Me.ListView3.SelectedItems(idlista).SubItems(3).Text = "Inserimento metadati in corso..."
ecc....
Next
a questo punto contemporaneamente posso eseguire un'altra chiamata invoke quindi richiamare un altro thread in cui vi gestito la listview1 utlizzato già da un thread in esecuzione?
Ciao
End sub
totti240282
Profilo
| Guru
1.574
messaggi | Data Invio:
lun 16 gen 2006 - 09:30
non credo dovrebbe generare una eccezzione dal momento che le due procedure vadano a modificare gli stessi dati della listview...a meno che (penso) non si usi la sincronizzazione !!!!
C'è solo un capitano !!!!!!
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
lun 16 gen 2006 - 13:48
Non lo so comunque ti posto il codice completo...
Ps per la sincronizzazione avresti un link o qualcosa dove posso vedere qualche esempio?
Public Delegate sub thr1()
Dim prova As New thr1(AddressOf lista)
Me.listView1.Invoke(prova)
Private sub Lista()
For idlista = 0 To Me.ListView3.Items.Count - 1
Me.ListView3.Items(idlista).Selected = True
Me.ListView3.SelectedItems(idlista).SubItems(3).Text = "Inserimento metadati in corso..."
ecc....
Next
Public Sub timer1()
AddHandler p.Elapsed, AddressOf tick
p.Interval = 1000
p.Enabled = True
End Sub
Public Sub tick(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs)
Try
pb.Value = file.Lenght(esempio)
Catch
MsgBox(Err.Description)
End Try
End Sub
Tieni presente che il timer viene avviato in un thread...
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
totti240282
Profilo
| Guru
1.574
messaggi | Data Invio:
lun 16 gen 2006 - 15:35
ok fino qui ci siamo ora dimmi dove ti da errore di preciso e a quale operazione esattamente.
Per la sincronizzazione cerca su msdn syncklock
C'è solo un capitano !!!!!!
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
lun 16 gen 2006 - 15:56
Per il synclock è quello che di solito viene utilizzato nei thread con Synclock(list1)....end Synclock?
Comunque il primo thread lo esegue correttamente..l'errore si genera appena il programma esegue questo codice:
pb.Value = file.Lenght(esempio)
in quanto questo viene eseguito di continuo dal timer..
l'errore che la listview è già gestita da un altro thread...
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
totti240282
Profilo
| Guru
1.574
messaggi | Data Invio:
lun 16 gen 2006 - 22:05
non credo che un thread secondario possa accedere alla progressbar.
C'è solo un capitano !!!!!!
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
lun 16 gen 2006 - 23:21
Ok...ma la progressbar viene aggiornata nell'evento tick del timer quindi quindi durante l'esecuzione di un secondo thread..
Comunque mi sembra strano e quindi come potrei gestire l'aumento del values della progressbar nel timer?
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
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 !