将变量传递给 vb.net 中的多线程子程序
passing variables to a multi-threaded sub in vb.net
我希望有人能帮助我,我正在尝试对我的应用程序进行一些多线程处理,这是一个 vb.net 控制台,它处理接收到的串行数据并相应地处理它。
我有很多潜艇,值得多线程(例如写入MySQL),但我最大的问题是我对多线程和传递参数的理解。
在我的系统中,我接收串行数据并解析它以获得一个字符串变量"fixed",它可能会非常快速地改变。
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()
我感到困惑的是如何将固定变量传递给该子程序,如果我将其作为全局变量,则变量很可能会发生变化并使其变得毫无意义,但据我了解,我不能直接通过线程传递它,但是有没有其他方法可以实现它?
我以此为例,但如果我可以传递变量/对象/class,那么我会使用相同的概念并将其应用于其他潜艇。
非常感谢!
IMO 最简单的方法是使用 lambda 表达式来定义用于线程的子函数或函数,从而允许将参数直接传递给它:
Dim MessageThread As New System.Threading.Thread(Sub() PageProcessing.DoWork(fixed))
MessageThread.Start()
或者,您可以使用 Start 方法的重载来传递参数,但这不是首选方法,因为类型不安全,因为它只接受 Object 类型。对于值类型也不是那么有效,因为它们将被装箱和拆箱。
我希望有人能帮助我,我正在尝试对我的应用程序进行一些多线程处理,这是一个 vb.net 控制台,它处理接收到的串行数据并相应地处理它。
我有很多潜艇,值得多线程(例如写入MySQL),但我最大的问题是我对多线程和传递参数的理解。
在我的系统中,我接收串行数据并解析它以获得一个字符串变量"fixed",它可能会非常快速地改变。
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()
我感到困惑的是如何将固定变量传递给该子程序,如果我将其作为全局变量,则变量很可能会发生变化并使其变得毫无意义,但据我了解,我不能直接通过线程传递它,但是有没有其他方法可以实现它?
我以此为例,但如果我可以传递变量/对象/class,那么我会使用相同的概念并将其应用于其他潜艇。
非常感谢!
IMO 最简单的方法是使用 lambda 表达式来定义用于线程的子函数或函数,从而允许将参数直接传递给它:
Dim MessageThread As New System.Threading.Thread(Sub() PageProcessing.DoWork(fixed))
MessageThread.Start()
或者,您可以使用 Start 方法的重载来传递参数,但这不是首选方法,因为类型不安全,因为它只接受 Object 类型。对于值类型也不是那么有效,因为它们将被装箱和拆箱。