【问题标题】:VB.NET: Sending Multiple Arguments To a Background WorkerVB.NET:向后台工作人员发送多个参数
【发布时间】:2014-04-27 04:25:42
【问题描述】:

我正在尝试使用 BackgroundWorker 在单独的线程上执行任务。

我可以将单个参数传递给 BackgroundWorker,如下所示:

向 BackgroundWorker 发送参数:

Private Sub btnPerformTasks_Click(sender As System.Object, e As System.EventArgs) Handles btnPerformTasks.Click

    Dim strMyArgument as String = "Test"
    BW1.RunWorkerAsync(strMyArgument)

End Sub

在 BackgroundWorker 中检索参数:

Private Sub BW1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BW1.DoWork
    Dim strMyValue As String
    strMyValue = e.Argument  'Test
End Sub

RunWorkerAsync() 只有 2 个重载方法。一种不带参数,一种只带一个参数。

我想知道:

  1. 如何将多个值传递给BW1.RunWorkerAsync()
  2. 如何从BW1_DoWork 内部检索这些多个值

【问题讨论】:

  • 一个参数就足以传递具有所需属性的对象。写一个小助手类。或者使用 lambda 表达式。
  • @HansPassant 我相信 pacane 提供的答案是辅助类方法。你能展示如何使用 lambda 表达式来实现这一点吗?
  • @HansPassant 这个问题上面已经说得很清楚了。我可以使用 pacane 回答的类方法来完成问题所需的内容。我只想知道通过使用 lambda 表达式是否可以更有效地做同样的事情。

标签: vb.net multithreading arguments backgroundworker argument-passing


【解决方案1】:

您可以将参数包装在一个对象中,然后将该对象传递给工作人员。

要检索它,您只需将 DoWork 中的 e 强制转换为您的自定义类型。

这是一个例子:

' Define a class named WorkerArgs with all the values you want to pass to the worker.
Public Class WorkerArgs
    Public Something As String
    Public SomethingElse As String
End Class

Dim myWrapper As WorkerArgs = New WorkerArgs()
' Fill myWrapper with the values you want to pass

BW1.RunWorkerAsync(myWrapper)

' Retrieve the values
Private Sub bgw1_DoWork(sender As Object, e As DoWorkEventArgs)
        ' Access variables through e
        Dim args As WorkerArgs = e.Argument
        ' Do something with args
End Sub

【讨论】:

  • 你能举个例子吗?
  • @slayernoah 你去吧
  • 意识到Dim args As WorkerArgs = e.Argument 在上面的示例中不是必需的。看起来我可以使用 e.Argument.Somethinge.Argument.SomethingElse 获取传递的值。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2016-07-09
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多