Sincronizzare la chiamata invoke oppure dei thread

domenica 15 gennaio 2006 - 01.40

trinity Profilo | Guru

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

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

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

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

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

non credo che un thread secondario possa accedere alla progressbar.

C'è solo un capitano !!!!!!

trinity Profilo | Guru

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5