【问题标题】:passing variables to a multi-threaded sub in vb.net将变量传递给 vb.net 中的多线程子
【发布时间】:2015-07-07 10:57:58
【问题描述】:

我希望有人能帮助我,我正在尝试对我的应用程序进行一些多线程处理,这是一个 vb.net 控制台,可以处理收到的串行数据并相应地处理它。

我有许多值得多线程处理的子程序(例如写入 MySQL),但我最大的问题是我对多线程和传递参数的理解。

在我的系统中,我接收串行数据并对其进行解析以获得一个字符串变量“固定”,该变量可能会以非常快的速度发生变化。

        If fixed <> "" Then
            Console.WriteLine(DateTime.Now.ToString & "  " & fixed)
            Console.WriteLine("")
            PageProcessing.DoWork(fixed)
        End If

据我了解,system.threading.thread 之类的内容值得一看,如下例所示:

Dim MessageThread As New System.Threading.Thread(AddressOf PageProcessing.DoWork)
        MessageThread.Start()

虽然我感到困惑的是如何将固定变量传递给该子变量,如果我将它作为全局变量,则变量很可能会改变并使其毫无意义,但据我所知,我可以' t 直接通过线程传递它,但是我有其他方法可以实现吗?

我以此为例,但如果我可以传递一个变量/对象/类,那么我将使用相同的概念并将其应用于其他子类。

非常感谢您!

【问题讨论】:

标签: .net vb.net multithreading parameter-passing


【解决方案1】:

IMO 最简单的方法是使用 lambda 表达式来定义用于线程的子函数或函数,从而允许将参数直接传递给它:

    Dim MessageThread As New System.Threading.Thread(Sub() PageProcessing.DoWork(fixed))
    MessageThread.Start()

或者,您可以使用 Start 方法的重载来传递参数,但这不是首选方法,因为它不安全,因为它只接受 Object 类型。这对于值类型也不是那么有效,因为它们会被装箱和拆箱。

【讨论】:

  • 感谢您的建议,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
相关资源
最近更新 更多