Передача значений с помощью параллельных расширений и VB.net - PullRequest
1 голос
/ 07 ноября 2008

Я ищу пример того, как сделать следующее в VB.net с параллельными расширениями.

Dim T As Thread = New Thread(AddressOf functiontodowork)
T1.Start(InputValueforWork)

Я застрял в том, как передать в задачу мой параметр InputValueforWork

Dim T As Tasks.Task = Tasks.Task.Create(AddressOf functiontodowork)

Любые предложения и, возможно, пример кодирования приветствуются.

Andrew

Ответы [ 3 ]

1 голос
/ 09 декабря 2008

Я решил свой вопрос. Вы должны передать массив со значениями.

Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)
0 голосов
/ 08 декабря 2008

Настоящая проблема здесь в том, что 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
0 голосов
/ 07 ноября 2008

Не обязательно самый полезный ответ, который я знаю, но в C # вы можете сделать это с закрытием:

var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )
...