![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
terance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
Есть 4 кнопки и 4 отдельных цикла (по одному на каждую кнопку) . Подскажите как реализовать следующее : если первая кнопка нажата ,то выполняется 1ый цикл , если происходит нажатие какой либо другой кнопки, то 1ый цикл останавливает работу и начинает работу другой цикл .
Пишу все это дело на С#. Обьясните , как мне реализовать переход между циклами(что бы один завершался ,а другой начинался)? |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
А по окончании работы второго первый продолжает работу? Если нет, то всё тривиально...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
terance |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
хм...цикл быстро начинает заполнять текст бокс .как замедлить заполнение ?пытался похимичить с System.Threading.Thread.Sleep(); но при вставке в цикл функции senCommands() программа начинает висеть
Это сообщение отредактировал(а) terance - 8.6.2010, 22:44 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
Переезжай в конкретный язык. ИМХО.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
можно запихнуть каждый цикл в поток и по нажатию кнопки усыплять все потоки и будет один конкретный, тогда и Sleep можно использовать
в принципе, для ручного распределения времени есть ещё нити (fibers), но есть подозрение, что там Sleep не даст желаемого результата -------------------- qqq |
|||
|
||||
terance |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 10.10.2007 Репутация: нет Всего: нет |
мне на msdn посоветовали сделать следующие изменения в коде
добавить в этот кусок
следующие строчки :
при этом в обработчиках событий кнопок ,просто менять переменную
но при отладке приложения возникает следующая ошибка :
Это сообщение отредактировал(а) terance - 9.6.2010, 17:57 |
||||||||
|
|||||||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
я бы посоветовал использовать методы Monitor.Wait и Monitor.Pulse
неплохо описано здесь P.S.
почитайте про Control.Invoke() или про Form.Invoke() Это сообщение отредактировал(а) tol05 - 10.6.2010, 13:02 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Polesinskij |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 31.10.2013 Репутация: нет Всего: нет |
на си эта концепция реализуется через парадигму обмена "посланиями". А так не знаю, я бы попробовал переменную нафиг ввести для кнопки и наверно на иф брек поставить, а так бы и не стал программировать в такой среде где этого сделать не получиться.
![]() |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: 1 Всего: 1 |
Если нужно постепенно заполнять значениями некий текстбокс, то используйте Timer. Не будет проблем с контролами. Задайте интевал повтора и все.
|
|||
|
||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
terance, если я правильно понял вашу задачку, то вам совершенно не нужно иметь 4 цикла, достаточно одного, и просто подменять ему текущее сообщение. Затем, код у вас совершенно нерабочий, т.к. содержит в основном ошибки.
Далее по некоторым комментариям:
Программа у вас висит хотя бы потому, что в её основном потоке выполняется бесконечный цикл. Слип, не слип - это в данном случае не важно. Небольшой ликбез - в WinForms визуальных компонентах (наследники Control) во время выполнения всегда проверяется - из какого потока вы полезли менять контрол, и если это не основной поток (в котором изначально запускается ваше приложение), то будет вот такое исключение. Это сделано для того, чтобы поддерживать согласованное состояние внутри инфраструктуры WinForms, иначе данные контролов можно будет менять асинхронно и ваша программа очень скоро упадёт набок и задёргается. Поэтому ваш код обязан выполнять явную синхронизацию с основным UI потоком, прежде, чем сможет работать с контролами. Если вы не порождаете новых потоков, то синхронизация не нужна - вы уже внутри UI потока. Но если доступ идёт из другого потока (не UI), то необходимо оборачивать такие вызовы в делегаты и передавать методам Invoke/BeginInvoke. Эти методы отправят ваш делегат в очередь к UI потоку, а тот, когда освободится, займётся вашим делегатом. Если у вас еще будут такие задачки\лабы и т.д., то крайне рекомендую прочитать этот цикл статей - очень доступно и подробно расписано про потоки в C#: http://www.rsdn.ru/article/dotnet/CSThreading1.xml Я накидал программку, решающую вашу задачу (если я правильно её понял) и прикрепил к сообщению. Будут вопросы - спрашивайте. Присоединённый файл ( Кол-во скачиваний: 0 ) ![]() --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |