VB.NET - Форма и форма формы прерывания
У меня есть форма, которая проходит через бесконечный цикл и обрабатывает данные. Когда я нажимаю кнопку, которая "закрывает" форму, форма продолжает обрабатывать, даже если она закрыта. Я хочу, чтобы форма полностью заканчивалась и выходила из своего оператора цикла, а затем открывала новую форму.
Вот код, который я использую, чтобы закрыть форму
frmMain.Close()
frmMain.Dispose()
Примечание. Я не использую потоки, это просто приложение VB.NET. Я не закрываю основную форму запуска.
Ответы
Ответ 1
"Правильный" способ сделать это с реальными потоками работника. Но это также будет работать без использования фоновых рабочих потоков.
Объявить переменную в классе формы.
Private keepLoopAlive As Boolean
Затем напишите свой цикл обработки как нечто вроде:
keepLoopAlive = True
Do While keepLoopAlive
(your code that loops here)
DoEvents
Loop
Затем в вашем закрытом случае выполните:
keepLoopAlive = False
Me.Close()
Это приведет к тому, что цикл завершит первый шанс, который он получит, и ваша форма должна закрыть.
Обратите внимание: я написал этот код из памяти, а не в среде IDE, поэтому могут быть опечатки.
Ответ 2
Я не .NET, поэтому это может быть неверным, но если бы я выполнял бесконечный цикл, я бы проверял каждый раз, когда я начинал, что цикл все еще действителен с каким-то булевым значением, и если он не удался, выйдите из цикла.
Когда вы закрываете форму, установите логическое значение false и оно выпадет, и вы можете либо иметь внешний цикл, который ждет и перезапускает цикл, либо вы можете перезапустить всю функцию в другое время.