Ожидание потока - Visual Basic .NET
Формулировка задачи:
Всем привет!
Мужики, помогите сделать наиболее правильно.
Суть такая.
Есть основная форма.
На основной форме кнопка.
Нажимаем кнопку на основной форме, запускается процедура (Sub1) запускающая класс в потоке, который кое-что выполняет и вызывает ещё одну форму(Form2).
Нужно ждать пока в Form2 не будет нажата кнопка, пока этого не произойдет, код основной формы после Sub1 выполнять нельзя.
После нажатия кнопки в Form2 необходимо продолжить выполнение кода основной формы.
Проблема вот в чем.
Из главной формы через Sub1, класс вызывается в отдельном потоке, поэтому не дожидаясь завершения Sub1, начинает выполняться код, который идет ниже Sub1.
Join() не подходит.
Пробовал после Sub1 вставить бесконечный цикл while с флагом true или false, который меняется после нажатия на кнопку во второй форме, условно говоря такой вариант работает, но фризит первую форму, что не годится. Да и колхозный велосипед это.
Какие есть ещё варианты?
Схематично код выглядит так
Решение задачи: «Ожидание потока»
textual
Листинг программы
Public Class Form1 Private Delegate Sub _runThread() Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim th As New _runThread(AddressOf Sub1) 'зпуск потока th.BeginInvoke(Nothing, Nothing) End Sub 'вызывается из под дочернего потока после завршения работы Private Sub DoNext() Dim b1, b2, b3 As Integer b1 = 100 b2 = 100 b3 = b1 + b2 End Sub Public Sub Sub1() Dim cl As New MyCls 'cl.run() 'MyCls должен вызывать форму при помощи ShowDialog Me.Invoke(New MethodInvoker(AddressOf DoNext)) End Sub End Class Public Class MyCls 'Тут поток 'Куча тяжелых процедур 'Вызов Form2 с кнопкой, нажав на кнопку код после Sub1() на Form1 должен продолжиться End Class 'Public Class Form2 'Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Me.DialogResult = Windows.Forms.DialogResult.OK 'End Sub 'End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д