Правильно завершить поток - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Прошу помощи людей, хорошо разбирающихся в многопоточности. Из-за зависания формы приложения во время долгого выполнения (не отвечают никакие элементы управления) пришёл к воплощению многопоточности в дело. Но если делегаты и потоки удалось освоить, то правильно завершить эти потоки никак не удаётся. К сожалению во всей литературе и на форумах не нашёл ответа на этот вопрос, везде речь о создании потока, а не о завершении во время его выполнения. Привожу сильно упрощённый вариант, где в качестве комментарий заключены различные попытки завершения потока. Одна кнопка запускает поток, другая его должна завершать. Вот как это воплотить?
Буду рад любым советам, хотя различнейшие варианты уже перепробовал...

Решение задачи: «Правильно завершить поток»

textual
Листинг программы
    Public Delegate Sub ДелегатТекст(ByVal text As String)
    Public Delegate Sub ДелегатЦифр(ByVal text As Integer)
    Public ext As Boolean = False
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Старт"
        Button2.Text = "Стоп"
    End Sub
 
    ' Делегат 1
    Private Sub ListBox(s As String)
        If ListBox1.InvokeRequired Then
            Me.Invoke(New ДелегатТекст(AddressOf ListBox), s)
        Else
            ListBox1.Items.Add(s)
        End If
    End Sub
 
    ' Делегат 2
    Private Sub Label(s As Integer)
        If Label1.InvokeRequired Then
            Me.Invoke(New ДелегатЦифр(AddressOf Label), s)
        Else
            Label1.Refresh()
            Label1.Text = s
        End If
    End Sub
 
    ' Процесс потока
    Public Sub Процесс_потока(ByVal ИменаФайлов As System.Object) ' Процесс потока
        For a = 0 To 100000
                Label(a)
                ListBox(a)
            If ext Then Exit For
        Next
    End Sub
 
    'Запуск потока
    Public Sub Кнопка_Старт(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim Поток As New System.Threading.Thread(AddressOf Процесс_потока)
        Поток.Start()
    End Sub
 
    'Остановка потока
    Public Sub Кнопка_Стоп(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        ext = True
    End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы