首页 > 解决方案 > 如何在新线程中修改文本框值

问题描述

我有这个子:

Public Sub obtenerValorDeFichero()
    Dim ruta As String
    ruta = "file.txt"
    Dim myFile As New FileInfo(ruta)
    Dim sizeInBytes As Long = myFile.Length
    While (Convert.ToInt32(sizeInBytes.ToString) < 4)
        myFile.Refresh()
        sizeInBytes = myFile.Length
    End While
    Threading.Thread.Sleep(500)
    Me.TextBox3.Text = File.ReadAllText(ruta).Trim
End Sub

我通过这种方式在新代码中调用它:

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(Sub() obtenerValorDeFichero())
myThread.Start()

但是当尝试更改 Me.Textbox3.Text 值时它会崩溃,我该怎么做?

标签: vb.netmultithreading

解决方案


我使用这种方法从创建它的线程以外的线程更新 TextBox。

Private Delegate Sub SetTextBoxDelegate(ByVal TB As TextBox, ByVal txt As String)

Private Sub SetTextBoxWithInvoke(ByVal TB As TextBox, ByVal txt As String)
    If TB.InvokeRequired Then
        TB.Invoke(New SetTextBoxDelegate(AddressOf SetTextBoxWithInvoke), New Object() {TB, txt})
    Else
        TB.Text = txt
    End If
End Sub

然后在obtenerValorDeFichero()你可以更换

Me.TextBox3.Text = File.ReadAllText(ruta).Trim

SetTextBoxWithInvoke(Me.TextBox3, File.ReadAllText(ruta).Trim)

问候。


推荐阅读