将变量传递给vb.net

时间:2015-07-07 10:57:59

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

我希望有人可以帮助我,我正在尝试对我的应用程序进行多线程处理,这是一个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,那么我将使用相同的概念并将其应用于其他潜艇。

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

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

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

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