Как прослушать стандартную в и сокет на том же потоке в C #? - PullRequest
1 голос
/ 05 февраля 2010

Я пытаюсь создать сетевое консольное приложение, но оно должно уметь одновременно прослушивать стандартный ввод и ввод из сокета. В C ++ я бы использовал для этого функцию posix select (), но в C # кажется, что эквивалентная функция выбора предназначена только для сокетов. Есть ли способ, которым я могу слушать оба входа в C #, не прибегая к нескольким потокам?

1 Ответ

1 голос
/ 05 февраля 2010

Для ожидания на нескольких входах вам нужен WaitHandle для каждого, а затем вы вызываете статический метод WaitHandle.WaitAny .

Но другой вариант - использовать асинхронный ввод-вывод. Используйте BeginXXXX для запуска операций чтения / получения. Вы предоставляете обратный вызов в каждом случае, который будет выполнен по завершении. После того, как вы их запустите, вы ждете объект монитора и в ответных реакциях вы посылаете этот объект монитора, чтобы уведомить о завершении. Это очень эффективная форма многопоточного программирования, но вам не нужно явно запускать потоки.

Чтобы получить необработанный поток для стандартного ввода, используйте Console.OpenStandardInput .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...