Как получить доступ к richtextbox через другой поток

Эй, ребята, мой вопрос, как я могу получить доступ (обновить / прочитать) richtextbox в теме. Я только что создал очень простой код для вас, чтобы понять, что я делаю. Я искал в Интернете некоторые статьи, в которых упоминалось о invoke, делегате или фоновом специалисте, надеюсь, что кто-нибудь может прийти и сказать мне, что и как использовать. Большое спасибо.

Imports System.Threading

Public Class form1

Dim flag As Boolean = True
Dim startbtn As Thread
Dim stopbtn As Thread

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    startbtn = New Thread(AddressOf startfuction)
    startbtn.Start()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    stopbtn = New Thread(AddressOf stopfunction)
    stopbtn.Start()
End Sub

'************** thread 1

Private Sub startfuction()
    flag = True
    While flag = True
        richtextbox1.text = "Your process started"         'error
    End While

End Sub

'************** thread 2
Private Sub stopfunction()
    flag = False
    startbtn.Abort()
    MsgBox("You ended the process")
End Sub

Конечный класс

1 ответ

Решение
Imports System.Threading

Public Class Form1

Dim flag As Boolean = True
Dim startbtn As Thread

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    startbtn = New Thread(AddressOf startfuction)
    startbtn.Start()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    flag = False
    MsgBox("You ended the process")
End Sub

'************** thread 1

Private Sub startfuction()
    flag = True
    While flag = True
        Me.Invoke(Sub() RichTextBox1.Text = "Your process started")         'error
    End While
    Me.Invoke(Sub() RichTextBox1.Text = "Your process stopped")         'error

End Sub
End Class

РЕДАКТИРОВАТЬ 1

Также при запуске потоков, когда вы закрываете свое приложение, вы можете столкнуться с проблемами, потому что ваши потоки завершатся преждевременно.

сделать что-то вроде

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    flag = False
    Application.DoEvents()
End Sub
Другие вопросы по тегам