Oppure

Loading
22/02/11 15:40
Question
Ciao a tutti,
da poco ho impostato option strict su ON ed ho notato alcuni problemi con il multithreading che proprio non riesco a spiegarmi :S

Praticamente,quando la avevo su OFF,ero solito usare le lambda expressions per eseguire altri thread in questo modo:
Private Sub AsyncOperation()
Dim Parameter As String = "String"
Dim T As New Threading.Thread(Sub() MsgMe(Parameter)) : T.Start(Parameter)
End Sub

Private Sub MsgMe(ByVal Value As String)
MessageBox.Show(Value)
End Sub


Il problema è che ora il thread viene sì eseguito,ma in un modo assurdo!
Se io per esempio metto una form con Show() prima di instanziare il thread e di avviarlo,questo metodo viene eseguito dopo che ha finito.

Come soluzione sono ritornato al "classico",ovvero scrivo una cosa di questo tipo:
Private Sub AsyncOperation()
Dim Parameter As String = "String"
Dim T As New Threading.Thread(New Threading.ParameterizedThreadStart(AddressOf MsgMe)) : T.Start(Parameter)
End Sub

Private Sub MsgMe(ByVal Value As Object)
MessageBox.Show(Value.ToString)
End Sub

Però non mi piace molto,perché sono obbligato a definire Value come object per farlo coincidere con la firma di ParameterizedThreadStart.


Qualche aiutino? 8-|


Ultima modifica effettuata da Question 22/02/11 16:09
aaa
23/02/11 9:38
Il Totem
Cioè, se hai questo codice:
Form1.Show()
AsyncOperation()

viene eseguito prima il messagebox e poi show()? Non mi sorprende, in quanto nessuna delle due chiamate è bloccante: entrambe sono asincrone...
aaa