Передача значений с помощью параллельных расширений и VB.net

StackOverflow https://stackoverflow.com/questions/270919

Вопрос

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

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

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

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

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

Андрей

Это было полезно?

Решение

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

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>, только функции

Вы можете обойти это ограничение, используя помощник на 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top