Vb. net и многопоточность UI

Vb. net и многопоточность UI

  1. В Вашем примере НЕ создается поток. BeginInvoke предназначен для вызова методов кантрола из потока, в котором кантрол не был создан. Сам по себе поток он не создает. Поэтому будет работать так:
    Imports System.Threading
    Public Class Threadform
    Private StopFlag As Boolean
    Delegate Sub InvokeDelegate(ByVal Message As String)
    Public Sub Print(ByVal Message As String)
    With tBox
    .SelectionStart = .Text.Length
    .SelectedText = vbCrLf Message
    End With
    End Sub

    Sub DoTheWork()
    Dim myArray(0) As Object
    Do
    ваше сообщение как аргумент BeginInvoke
    myArray(0) = «message… «
    tBox.BeginInvoke(New InvokeDelegate(AddressOf Print), myArray)
    Thread.Sleep(1) милисекунда на обработку очереди сообщений окна,
    если это убрать — интерфейс повиснет
    Loop Until StopFlag
    End Sub

    Private Sub bStop_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bStop.Click
    StopFlag = True
    bStart.Enabled = True
    End Sub

    Private Sub bStart_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bStart.Click
    StopFlag = False
    bStart.Enabled = False
    создаем поток
    Dim t As New Thread(AddressOf DoTheWork)
    запускаем поток
    t.Start()
    End Sub
    End Class

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *