使用并行扩展和 VB.net 传递值

发布于 2024-07-09 01:28:49 字数 343 浏览 10 评论 0原文

我正在寻找一个示例,说明如何使用并行扩展在 VB.net 中执行以下操作。

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

我遇到的问题是如何将我的参数 InputValueforWork

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

Any 建议传递到任务中,并且可能会欢迎一个编码示例。

安德鲁

I am looking for an example of how to do the following in VB.net with Parallel Extensions.

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

Where I'm getting stuck is on how to pass into the task my parameter InputValueforWork

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

Any suggests and possibly a coding example would be welcome.

Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心作怪 2024-07-16 01:28:49

我解决了我自己的问题。 您必须传入一个包含值的数组。

Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)

I solved my own question. you have to pass in an array with the values.

Dim A(0) as Int32
A(0) = 1
Tasks.Task.Create(AddressOf TransferData, A)
请持续率性 2024-07-16 01:28:49

不一定是我所知道的最有帮助的答案,但在 C# 中,你可以通过闭包来做到这一点:

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

Not necessarily the most helpful answer I know, but in C# you could do this with a closure:

var T = Tasks.Task.Create( () => functionToDoWork(SomeParameter) )
乜一 2024-07-16 01:28:49

这里真正的问题是 VB 9 不支持 Action;,仅 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

The real problem here is that VB 9 doesn't support Action<T>, only Funcs

You can work around this limitation by having a helper in C#, like this:

public class VBHelpers {
    public static Action<T> FuncToAction<T>(Func<T, object> f) {
        return p => f(p);
    }
}

Then you use it from VB like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文