首页 > 解决方案 > 线程内部模块并将值添加到 me.texbox1

问题描述

有谁知道为什么我的代码在我的文本框中返回“”?:-)

这是我在主班

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button2.Click
   Dim My_Thread as Threading.Thread
   My_Thread = New Threading.Thread(AddressOf Module1.MyTest)
   My_Thread.Start()
End Sub

这在module1中

Sub MyTest()
   Dim TestingValue as string = "Test"
   MainForm.Textbox1.Text = TestingValue
End sub

调用所有时间崩溃代码,然后在 texbox1 中再次尝试返回“”:-/

标签: vb.net

解决方案


在 MainForm 上创建一个对您想要的任何对象的公共声明的子类,然后将该类作为参数传递给模块。与传递整个 Form 类实例相比,这将是一种更简洁的方法。然后使用 Jimi 建议的方法,您可以设置文本框而不会违反跨线程。

    Public Class MainForm

        Public Class PassToModule
            Public TxBx1 As TextBox = MainForm.TextBox1
            Public TxBx2 As TextBox = MainForm.TextBox2
        End Class

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim PassToModule As New PassToModule

            Dim My_Thread As Threading.Thread
            My_Thread = New Threading.Thread(AddressOf MyTest)
            My_Thread.Start(PassToModule)

        End Sub

    End Class

    Module Module1

        Dim FromMainForm As MainForm.PassToModule

        Sub MyTest(PasToModule As MainForm.PassToModule)
            FromMainForm = PasToModule
            FromMainForm.TxBx1.BeginInvoke(New MethodInvoker(Sub()
                                                                 FromMainForm.TxBx1.Text = "Test"
                                                                 FromMainForm.TxBx2.Text = "Test"
                                                             End Sub))
        End Sub

    End Module

推荐阅读