Запись в richtextbox с фоновым рабочим - PullRequest
0 голосов
/ 09 января 2019

Я искал ответ на этот вопрос, но я действительно не нашел один

Мне нужно написать в richtextbox во время работы моего кода. В основном мне нужно обновить richtextbox со строками статуса, такими как

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i = 0 To 10000
        richtextbox1.appendtext(i.ToString & vbCrLf)
    Next
End Sub

Однако мне нужно сделать прокрутку richtextbox во время работы, и, насколько я понял, мне нужно использовать Backgroundworker.

Я знаю, что это довольно просто для всех вас, но если бы кто-то мог мне помочь, я бы это очень оценил.

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать Async Await, а внутри него использовать делегат Invoke.

Public Class Form1
Dim cancelToken As New CancellationTokenSource

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Await Task.Run(Sub()
                       For i = 0 To 10000
                           Threading.Thread.Sleep(500)
                           RichTextBox1.Invoke(Sub()
                                                   RichTextBox1.AppendText(i.ToString & vbCrLf)
                                               End Sub)
                           If cancelToken.IsCancellationRequested Then
                               Return
                           End If
                       Next
                   End Sub)
End Sub

Private Sub bnCancel_Click(sender As Object, e As EventArgs) Handles bnCancel.Click
    cancelToken.Cancel()
End Sub
End Class

Я добавил Sleep, чтобы имитировать трудоемкий метод. Я также включил CancellationTokenSource, чтобы продемонстрировать, как остановиться.

Это можно использовать только для .NET Framework 4.5 и выше

...