我希望有人可以帮助我,我正在尝试对我的应用程序进行多线程处理,这是一个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()
虽然我很困惑,但我是如何将固定变量传递给该子,如果我将它作为一个全局变量,变量将有可能发生变化并使其毫无意义,但据我所知,我可以' t直接传递给线程,但还有另一种方法可以实现吗?
我以此为例,但如果我可以传递一个变量/ object / class,那么我将使用相同的概念并将其应用于其他潜艇。
非常感谢提前!
答案 0 :(得分:2)
IMO最简单的方法是使用lambda表达式来定义用于你的线程的子或函数,它允许将参数直接传递给它:
Dim MessageThread As New System.Threading.Thread(Sub() PageProcessing.DoWork(fixed))
MessageThread.Start()
或者您可以使用Start方法的重载来传递参数,但这不是首选方法,因为它不是类型安全的,因为它只接受Object类型。它对于值类型也不是那么有效,因为它们将被装箱和取消装箱。