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 и оно выпадет, и вы можете либо иметь внешний цикл, который ждет и перезапускает цикл, либо вы можете перезапустить всю функцию в другое время.