Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/146: Рейтинг темы: голосов - 146, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84

Ожидание события. Как правильно?

22.09.2015, 23:56. Показов 29976. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Язык C#. (Проект не помню точно как создавал. Но что-то по умолчанию с формами и без излишеств.)
Есть одна форма. На неё добавлены 3 элемента: Кнопка, COMпорт и таймер.
По нажатию на кнопку запускается некая функция (попутно запускается таймер и предполагается что по COMпорту что-то может прийти). И вот в процессе выполнения этой функции надо поставить её на паузу до тех пор пока либо таймер не сработает либо байт с порта не прийдёт. Сделал я вот таким способм.

Кусок этой самой функции, там где она собственно должна быть на паузе.
C#
1
2
3
4
5
6
7
8
9
10
.....
IsAnswered=false;
OutOfTime = false;
this.timer1.Enabled = true;
this.timer1.Start();
while ((!OutOfTime) && (!IsAnswered))
 {
     Application.DoEvents();//Ждём ответа.
 }
.....

И Также есть обработчики таймера и порта.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  private void timer1_Tick(object sender, EventArgs e)
        {
            this.timer1.Stop();
            this.timer1.Enabled = false;
            OutOfTime = true;
        }
 
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            int CurByte;
 
            this.timer1.Stop();
            this.timer1.Enabled = false;
            OutOfTime = false;
            IsAnswered = true;
        }
И всё вроде хорошо работает. Но цикл вместо спячки?!...Ну это както совсем не правильно. А вот как Правильно сделать? )
Что-то вроде
C++
1
2
3
4
HANDLE waitArray[2] = {event1, event2};
DWORD waitResult = WaitForMultipleObjects(2, waitArray, FALSE, INFINITE); //вместо цикла
//и 
SetEvent(event1);//в обработчике таймера и порта
можно на C# сделать? Но только без импорта дллелек... А как-то C#-ким методом.

Спасибо за внимание.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2015, 23:56
Ответы с готовыми решениями:

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

Как правильно удалять события
Как правильно удалять события в данном случае, ибо каждое добавленное событие сохраняется. Целесообразно ли использовать IDisposable и в...

Сделать ожидание события клика на программно созданных pictureBox
Как сделать ожидание события клика на программно созданных pictureBox? Пробовал через Sleep, но он подгружает программу, не кликнуть, не...

43
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
13.10.2015, 21:00
Студворк — интернет-сервис помощи студентам
Ммм, вот тут уже тяжело будет что-то квалифицированно советовать, ибо с подобными вещами я не работал. Все это физически подключено к компу или передается по сети? Если все на одном компе, то можно все написать в одной программе. Если же не обязательно-то для каждого различного устройства небольшая программка(пофигу на чем), которая передает данные на некий сервер, принимающий подключения. Сервер можно реализовать в виде консольной программки на C++ или вообще чистом С, ибо там, как я понял, ресурсоемкий алгоритм. А на шарпе написать оболочку для этой консольной программы, консольный ввод-вывод элементарано перенаправляется. Во всяком случае это первое, что приходит в голову, возможно кто-то с большим опытом в данном деле предложит что-то рациональнее.
0
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
14.10.2015, 08:22  [ТС]
А на шарпе написать оболочку для этой консольной программы, консольный ввод-вывод элементарано перенаправляется.
А что по этому поводу посоветуете? Есть просто одна консольная програмка, которую точно надо будет использовать, но она на Qt написана, в силу того что библиотеки для работы с одним из устройств написаны тока для Qt. А это для меня всё ещё дремучий лес. С моими платами то проблем не будет, они не сложные и я использую стандартные дрова от винды. А вот с этой точно будут проблемы. Я подозреваю должны быть способы и не один как из консольного приложения выдрать данные в другой процесс и засовывать команды в консоль обратно.
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
14.10.2015, 19:48
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
А что по этому поводу посоветуете? Есть просто одна консольная програмка, которую точно надо будет использовать, но она на Qt написана, в силу того что библиотеки для работы с одним из устройств написаны тока для Qt. А это для меня всё ещё дремучий лес. С моими платами то проблем не будет, они не сложные и я использую стандартные дрова от винды. А вот с этой точно будут проблемы. Я подозреваю должны быть способы и не один как из консольного приложения выдрать данные в другой процесс и засовывать команды в консоль обратно.
Консольным приложением можно очень просто управлять, перенаправив потоки ввода-вывода. Все это реализовано в классе Process. Это позволяет представить консольный ввод/вывод того второго приложения как 2 потока, в которые вы можете что хотите писать или считывать. Пример, и еще пример.
0
1 / 1 / 0
Регистрация: 01.05.2015
Сообщений: 84
16.10.2015, 10:43  [ТС]
Спасибо. буду разбираться.
Вобщем-то все вопросы которые относились к заголовку темы разобраны и весьма подробно. Остальное позже вынесу в другую тему. Пока есть о чём подумать.
Спасибо всем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2015, 10:43

Как правильно использовать события и свойства элемента CheckBox
Как получить обратное действие? Например у меня на форме: checkBox1 textBox1 Мне нужно чтобы когда была галочка (Что введенно...

SerialPort: Ожидание События или получение ответа из потока чтения флуда байтов
Имеется: OpenPort() - открывает порт и любимый Поток readport() - Поток который считывает всё, всегда и везде lan() - метод который...

Ожидание события
Есть некоторая модель данных, в которой постоянно что-то происходит. Изменяются данные, срабатывают её события и прочее. Нужен совет по...

Qt ожидание события
Виджет получил событие. Действие надо сделать после прошествии какого то времени, если не получено следующее событие до того как пройдет...

ожидание события
Есть несколько потоков и глобальная переменная. Можно ли сделать так что бы каждый поток ожидал пока переменная не приняла какое ли бо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru