остановить цикл

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

остановить цикл

Сообщение Novichok$ » 25.11.2005 (Пт) 12:12

Подскажите, как это «культурно» остановить.

Задумано так, что вместо MessageBox.Show("Pause")
Будет выполняться код.

Задача была – получить бесконечный цикл. Так, цикл получил, а как теперь остановить его – не знаю.
На форме только Button и CheckBox.
Нажимаю на Button – процесс пошел.
Хотел убрать галочку в CheckBox, что бы снять условие для работы бесконечного цикла, но CheckBox «не хочет» (недоступен).
Похоже, я пытаюсь влезть в работающий процесс, а VB этого не позволяет.

Может кто знает, как быть

Код: Выделить всё
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    StarteSleep()
End Sub

Private Sub StarteSleep()
        While Me.CheckBox1.Checked
            MessageBox.Show("Pause")
            Sleep(60000)
        End While
End Sub

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 01.12.2005 (Чт) 18:45

Даааа, наподсказывали, аж не унесу : )))

Может все таки кто то знает

Вставил, как мне подсказали, Application.DoEvents(), и с MessageBox, все действительно работает. НО,
Как только я вместо MessageBox подключаю свой код с таймером и меняю временной интервал с 5 на 10, или того хуже 20 секунд ... труба, или вообще не реагирует ( не ставится галочка в CheckBox1) либо ставится после 10той попытки, и после двойного щелчка почему то.
Конпка Close работает не с 10той а с 5той попытки, в общем, такая же история.

Можно ли здесь что нибудь придумать, может Thtead или добавить еще одну форму и попробовать передать ей управление.
Мне необходимо, что бы в момент щелчка на Close или CheckBox1 каким то образом останавливалась работа Sleep (или не останавливалась, а просто приоритет выполнения процесса менялся ) и выполнялись действия с Close или CheckBox1.
Код: Выделить всё
Private Sub StarteSleep()

          While CheckBox1.Checked = False
            'TimerAction()
            'MessageBox.Show("Igraet!")
            Sleep(5000)
            Application.DoEvents()

        End While
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
        StarteSleep()

End Sub

Private Sub Close _Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Close.Click
  Me.Close()
End Sub

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 02.12.2005 (Пт) 0:14

Привет!.
По моему ты не правильно написал последовательность кода.
Нужно так:

Application.DoEvents()
System.Threading.Thread.Sleep(5000)
здесь пишешь код того что, должно произойти после задержки

Попробуй.

Удачи во всем.

ЗЫ А что такое Close_Click у тебя? По моему слово Close зарезервированное. А событие клик можно получить на форме или контроле.

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 02.12.2005 (Пт) 10:14

спасибо, но не помогло.

Duress
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 08.05.2005 (Вс) 0:05

Re: остановить цикл

Сообщение Duress » 04.12.2005 (Вс) 16:41

Пользуйся:
Private TSleep As Threading.Thread

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TSleep Is Nothing Then
TSleep = New Threading.Thread(AddressOf StarteSleep)
TSleep.Start()
ElseIf TSleep.ThreadState <> Threading.ThreadState.Running And TSleep.ThreadState <> Threading.ThreadState.WaitSleepJoin Then
TSleep = New Threading.Thread(AddressOf StarteSleep)
TSleep.Start()
End If
End Sub

Private Sub StarteSleep()
While Me.CheckBox1.Checked
MessageBox.Show("Pause")
Threading.Thread.Sleep(60000)
End While
End Sub

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.12.2005 (Вс) 22:33

нды, а таймер использовать в голову не приходило?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Novichok$
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 04.11.2005 (Пт) 16:53

Сообщение Novichok$ » 02.03.2006 (Чт) 23:54

Нды, я когда Sebas отвечает и не читаю уже

Таймер жрал у меня очень много ресурсов. А вот штука, которую написал мне Durres работает просто отменно, за что ему глубокое мерси от меня

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 03.03.2006 (Пт) 10:58

Novichok$

Зря ты не читаешь то, что Себас пишет, толково пишет - это раз
Потоки - это два
Таймер это три :roll:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 03.03.2006 (Пт) 12:02

Novichok$ писал(а):Таймер жрал у меня очень много ресурсов.


Это как?!?!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 03.03.2006 (Пт) 12:05

И правильное проектирование программы - четыре, а вернее с него то и надо начинать
Весь мир матрица, а мы в нем потоки байтов!

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 03.03.2006 (Пт) 12:36

!Viper! писал(а):И правильное проектирование программы - четыре, а вернее с него то и надо начинать

-это 0 :wink:


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList