Передача значений с помощью параллельных расширений и VB.net
Я ищу пример того, как сделать следующее в VB.net с параллельными расширениями.
Dim T As Thread = New Thread(AddressOf functiontodowork)
T1.Start(InputValueforWork)
Я застрял в том, как передать в задачу мой параметр InputValueforWork.
Dim T As Tasks.Task = Tasks.Task.Create(AddressOf functiontodowork)
Любые предложения и, возможно, пример кодирования приветствуются.
Эндрю
3 ответа
Решение
Я решил свой вопрос. Вы должны передать в массив со значениями.
Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)
Не обязательно самый полезный ответ, который я знаю, но в C# вы можете сделать это с закрытием:
var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )
Настоящая проблема здесь в том, что VB 9 не поддерживаетAction<T>
, только Funcs
Вы можете обойти это ограничение, имея помощника в C#, например:
public class VBHelpers {
public static Action<T> FuncToAction<T>(Func<T, object> f) {
return p => f(p);
}
}
Затем вы используете его из VB, как это:
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