VB.NET -прервите петлю формы и форму конца


У меня есть форма, которая проходит через бесконечный цикл и обрабатывает данные. Когда я нажимаю кнопку, которая "закрывает" форму, Форма продолжает обработку, даже если она закрыта. Я хочу, чтобы форма полностью завершилась и вышла из своего оператора цикла, а затем открыла новую форму.

вот код, который я использую, чтобы закрыть форму

frmMain.Close()
frmMain.Dispose()

примечание: Я не использую потоки это простоVB.NET применение. Я не закрываю основную форму запуска.

2 60

2 ответа:

"правильный" способ сделать это с фоновыми рабочими потоками на самом деле. Но это также будет работать без необходимости фоновых рабочих потоков.

объявить переменную в классе формы.

Private keepLoopAlive As Boolean

затем напишите цикл обработки, чтобы быть что-то вроде:

keepLoopAlive = True

Do While keepLoopAlive 

    (your code that loops here)

    DoEvents

Loop

затем на вашем близком событии сделайте:

keepLoopAlive = False
Me.Close()

это приведет к тому, что цикл закончится первым шансом, и ваша форма должна закрыться.

пожалуйста, обратите внимание, что я написал этот код из памяти, а не в IDE, поэтому могут быть опечатки.

Я не .NET разработчик, поэтому это может быть неверно, но если бы я выполнял бесконечный цикл, я бы проверял каждый раз, когда я начинал, что цикл все еще действителен с каким-то логическим значением, и если он не удался, выйдите из цикла.

когда вы закрываете форму, установите логическое значение false, и оно выпадет, и вы можете либо иметь внешний цикл, который ждет и перезапускает цикл, либо вы можете перезапустить всю функцию в другой раз.