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

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

22.09.2015, 23:56. Просмотров 4665. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2015, 23:56
Ответы с готовыми решениями:

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

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

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

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

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

43
EvilFromHell
948 / 847 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
13.10.2015, 21:00 41
Ммм, вот тут уже тяжело будет что-то квалифицированно советовать, ибо с подобными вещами я не работал. Все это физически подключено к компу или передается по сети? Если все на одном компе, то можно все написать в одной программе. Если же не обязательно-то для каждого различного устройства небольшая программка(пофигу на чем), которая передает данные на некий сервер, принимающий подключения. Сервер можно реализовать в виде консольной программки на C++ или вообще чистом С, ибо там, как я понял, ресурсоемкий алгоритм. А на шарпе написать оболочку для этой консольной программы, консольный ввод-вывод элементарано перенаправляется. Во всяком случае это первое, что приходит в голову, возможно кто-то с большим опытом в данном деле предложит что-то рациональнее.
0
JustOneQuestion
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 84
14.10.2015, 08:22  [ТС] 42
А на шарпе написать оболочку для этой консольной программы, консольный ввод-вывод элементарано перенаправляется.
А что по этому поводу посоветуете? Есть просто одна консольная програмка, которую точно надо будет использовать, но она на Qt написана, в силу того что библиотеки для работы с одним из устройств написаны тока для Qt. А это для меня всё ещё дремучий лес. С моими платами то проблем не будет, они не сложные и я использую стандартные дрова от винды. А вот с этой точно будут проблемы. Я подозреваю должны быть способы и не один как из консольного приложения выдрать данные в другой процесс и засовывать команды в консоль обратно.
0
EvilFromHell
948 / 847 / 345
Регистрация: 26.04.2012
Сообщений: 2,648
14.10.2015, 19:48 43
Цитата Сообщение от JustOneQuestion Посмотреть сообщение
А что по этому поводу посоветуете? Есть просто одна консольная програмка, которую точно надо будет использовать, но она на Qt написана, в силу того что библиотеки для работы с одним из устройств написаны тока для Qt. А это для меня всё ещё дремучий лес. С моими платами то проблем не будет, они не сложные и я использую стандартные дрова от винды. А вот с этой точно будут проблемы. Я подозреваю должны быть способы и не один как из консольного приложения выдрать данные в другой процесс и засовывать команды в консоль обратно.
Консольным приложением можно очень просто управлять, перенаправив потоки ввода-вывода. Все это реализовано в классе Process. Это позволяет представить консольный ввод/вывод того второго приложения как 2 потока, в которые вы можете что хотите писать или считывать. Пример, и еще пример.
0
JustOneQuestion
0 / 0 / 0
Регистрация: 01.05.2015
Сообщений: 84
16.10.2015, 10:43  [ТС] 44
Спасибо. буду разбираться.
Вобщем-то все вопросы которые относились к заголовку темы разобраны и весьма подробно. Остальное позже вынесу в другую тему. Пока есть о чём подумать.
Спасибо всем.
0
16.10.2015, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2015, 10:43

Как в одном обработчике события запустить другой обработчик события
Есть список listView1, который заполняется из массива PeopleListprivate void...

Как разделить события цифр на цифровой клавиатуре (NumLoсk) и события цифр расположенных над символами?
Помогите пожалуйста! Как разделить события цифр на цифровой клавиатуры...

Как сделать ожидание полной загрузки страницы в webbrowser?
Мне необходимо достать код страницы html из webbrowser в c#. С этим проблем не...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru