Параллельное обновление нескольких ProgressBar из разных потоков - Visual Basic .NET

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

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

Доброго всем времени суток! Суть проблемы: На форме 2 прогресс бара и 2 кнопки Нажал 1 кнопку запустил 1 поток начал обновляться 1 контрол. Нажал 2 кнопку запустил 2 поток - 1 поток остановился, дождался завершения работы 2 потока и затем продолжил работу. Как запустить 2 поток не прерывая 1-го и соответственно не прерывая обновления 1-го прогресс бара? Просьба не пинать ! И маленький примерчик, если можно.

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

textual
Листинг программы
Imports System.Threading
Public Class Form1
 
    'потоки
    Public myThread1 As New Thread(AddressOf ImitationWork1)
    Public myThread2 As New Thread(AddressOf ImitationWork2)
 
    'делегат. В данном случае 1, т.к. для обоих прогресс баров выполняется одинаковое действие.
    Delegate Sub myDelegate1(ByVal prc As Integer)
 
    'методы обращения к процедурам присвоения данных
    Public sendPrc1 As New myDelegate1(AddressOf StatusProgressbar1)
    Public sendPrc2 As New myDelegate1(AddressOf StatusProgressbar2)
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'запуск потока
        myThread1.Start()
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        myThread2.Start()
    End Sub
 
 
    ' имитация какого-нибудь процесса
    Sub ImitationWork1()
 
        Dim n As Integer = 0
        Do While n < 100
            Thread.Sleep(200)
            n += 1
 
            'отправляем значения при помощи метода Invoke в процедуры присвоения значений прогресс бару
            Me.ProgressBar1.Invoke(sendPrc1, n)
 
        Loop
    End Sub
 
    Sub ImitationWork2()
        Dim n As Integer = 0
        Do While n < 100
            Thread.Sleep(100)
            n += 1
 
            Me.ProgressBar1.Invoke(sendPrc2, n)
 
        Loop
    End Sub
 
    'процедуры присвоения значений прогресс барам
    Sub StatusProgressbar1(ByVal prc As Integer)
        Me.ProgressBar1.Value = prc
    End Sub
 
    Sub StatusProgressbar2(ByVal prc As Integer)
        Me.ProgressBar2.Value = prc
    End Sub
 
End Class

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


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

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

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