Passare valori con estensioni parallele e VB.net
-
06-07-2019 - |
Domanda
Sto cercando un esempio di come eseguire le seguenti operazioni in VB.net con le estensioni parallele.
Dim T As Thread = New Thread(AddressOf functiontodowork)
T1.Start(InputValueforWork)
Il punto in cui mi sto bloccando è come passare all'attività il mio parametro InputValueforWork
Dim T As Tasks.Task = Tasks.Task.Create(AddressOf functiontodowork)
Qualsiasi suggerimento e possibilmente un esempio di codifica sarebbe il benvenuto.
Andrew
Soluzione
Ho risolto la mia domanda. devi passare un array con i valori.
Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)
Altri suggerimenti
Non necessariamente la risposta più utile che conosco, ma in C # potresti farlo con una chiusura:
var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )
Il vero problema qui è che VB 9 non supporta Action<T>
, solo Funcs
Puoi aggirare questa limitazione avendo un helper in C #, in questo modo:
public class VBHelpers {
public static Action<T> FuncToAction<T>(Func<T, object> f) {
return p => f(p);
}
}
Quindi lo usi da VB in questo modo:
Public Sub DoSomething()
Dim T As Task = Task.Create(VBHelpers.FuncToAction(Function(p) FunctionToDoWork(p)))
End Sub
Public Function FunctionToDoWork(ByVal e As Object) As Integer
' this does the real work
End Function
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow