![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| ДобренькийПапаша |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Нужно, чтобы Handler отработал и вообще всё сначала отработало, а только потом выполнялась следующая команда. Sleep() вызывать не дело. А с многопоточкой я почти не работал. Как лучше здесь поступить? -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
||||||
|
|||||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Вот блокирующий (синхронный) вариант:
Это не многопоточный и самый самый простой вариант. Send можно вызывать только из одного одновременно. Подходит? Добавлено через 3 минуты и 40 секунд Можно еще делать очередь и обрабатывать очередь по завершению предыдущей команды. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Я переформулирую проблему топика. Код я неправильный привёл. Проблема такая:
Метод Send отправляет на порт пакет данных (команду) и возвращает ответ (тоже пакет данных - класс Batch). DataReceived-событие возбуждается системой, когда ей в голову придёт (пока там команда дойдёт до порта и устройство начнёт отвечать). Ожидание ответа (срабатывание события) сейчас мной сделано через цикл while как видно в методе ReceiveResponseBatch(). Вообще говоря, это работает. Но как-то это извращённо и некрасиво. Как можно сделать красиво?
А как очередь организовать? Что ты здесь имел ввиду конкретно? Это сообщение отредактировал(а) ДобренькийПапаша - 18.5.2011, 20:52 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| neic |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 839 Регистрация: 28.1.2007 Репутация: 1 Всего: 7 |
Может стоит использовать Semaphore? и очередь автоматически формируется и управлять легче всем эти делом будет.
|
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Я приводил код выше. Если смотреть по аналогии с вашим, то waitHandle - это как бы флаг IsAnswerReceived.
То есть:
Посмотри еще на Semaphore, как посоветовал neic, его тоже можно прикрутить тут. А про очередь, я имел ввиду асинхронный вариант. То есть метод Send ничего не возвращает, обработанные ответы передаются событием или делегатом. То есть по обычному асинхронному шаблону. Пример писать щас не хочу, потому что не знаю нужен ли тебе он. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |