Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Dubbio Option Strict ON con multithreading
Forum - C# / VB.NET - Dubbio Option Strict ON con multithreading

Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 16:40
Martedì, 22/02/2011
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:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub AsyncOperation()
  2. Dim Parameter As String = "String"
  3. Dim T As New Threading.Thread(Sub() MsgMe(Parameter)) : T.Start(Parameter)
  4. End Sub
  5.  
  6. Private Sub MsgMe(ByVal Value As String)
  7. MessageBox.Show(Value)
  8. 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:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub AsyncOperation()
  2. Dim Parameter As String = "String"
  3. Dim T As New Threading.Thread(New Threading.ParameterizedThreadStart(AddressOf MsgMe)) : T.Start(Parameter)
  4. End Sub
  5.  
  6. Private Sub MsgMe(ByVal Value As Object)
  7. MessageBox.Show(Value.ToString)
  8. 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 il 22/02/2011 alle 17:09


Ma ovviamente x64
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 10:38
Mercoledì, 23/02/2011
Cioè, se hai questo codice:
Codice sorgente - presumibilmente Plain Text

  1. Form1.Show()
  2. AsyncOperation()


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


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM