Передача значений с помощью параллельных расширений и 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
Другие вопросы по тегам