| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Вопрос по многопоточке |
| Автор: ДобренькийПапаша 17.5.2011, 19:42 | ||||||
Нужно, чтобы Handler отработал и вообще всё сначала отработало, а только потом выполнялась следующая команда. Sleep() вызывать не дело. А с многопоточкой я почти не работал. Как лучше здесь поступить? |
| Автор: -Mikle- 17.5.2011, 22:02 | ||
Вот блокирующий (синхронный) вариант:
Это не многопоточный и самый самый простой вариант. Send можно вызывать только из одного одновременно. Подходит? Добавлено через 3 минуты и 40 секунд Можно еще делать очередь и обрабатывать очередь по завершению предыдущей команды. |
| Автор: ДобренькийПапаша 18.5.2011, 20:15 | ||
| Я переформулирую проблему топика. Код я неправильный привёл. Проблема такая: Метод Send отправляет на порт пакет данных (команду) и возвращает ответ (тоже пакет данных - класс Batch). DataReceived-событие возбуждается системой, когда ей в голову придёт (пока там команда дойдёт до порта и устройство начнёт отвечать). Ожидание ответа (срабатывание события) сейчас мной сделано через цикл while как видно в методе ReceiveResponseBatch(). Вообще говоря, это работает. Но как-то это извращённо и некрасиво. Как можно сделать красиво?
А как очередь организовать? Что ты здесь имел ввиду конкретно? |
| Автор: neic 19.5.2011, 00:55 |
| Может стоит использовать Semaphore? и очередь автоматически формируется и управлять легче всем эти делом будет. |
| Автор: -Mikle- 19.5.2011, 07:45 | ||
| Я приводил код выше. Если смотреть по аналогии с вашим, то waitHandle - это как бы флаг IsAnswerReceived. То есть:
Посмотри еще на Semaphore, как посоветовал neic, его тоже можно прикрутить тут. А про очередь, я имел ввиду асинхронный вариант. То есть метод Send ничего не возвращает, обработанные ответы передаются событием или делегатом. То есть по обычному асинхронному шаблону. Пример писать щас не хочу, потому что не знаю нужен ли тебе он. |