2009-05-25 5 views
2

Я только что понял, что TextReader, тип Console.In, не имеет метода BeginRead.Асинхронное чтение из Console.In

Как можно получить асинхронные чтения с Console.In?

Моя первая идея - получить РУЧКУ на stdin и заставить официанта подождать, пока этот сигнал не будет сигнализировать. Но это связано с множеством вызовов Win32.

Есть ли более простой способ сделать это? Возможно, что-то на линии:

Stream s = (Stream) Console.In; 
s.BeginRead(..) 

Любые идеи?

+0

Вы можете сделать что-то похожее на мой ответ на этот вопрос http://stackoverflow.com/a/23628232/659190 – Jodrell

ответ

0

Создайте свой собственный класс, который обрабатывает вызов Console.Read и сохраняет все прочитанные данные где-то. Затем завершите поток с помощью EndRead и верните данные, которые он читает.

+1

Этот поток будет блокировать чтение-вызов. Как вы разблокируете его? (Скажем, для управляемого отключения.) Вы предлагаете Thread.Abort()? Не удалось ли оставить поток чтения в неопределенном состоянии? /L – leiflundgren

+0

Я лично использовал бы метод в классе, чтобы прервать поток, а затем явно очистить ресурсы. Я знаю, что это беспорядочное решение, но без возможности проверить данные в потоке. Thread.Abort() - единственное решение, о котором я могу думать. – Stephan

3

Вы можете опросить на Console.KeyAvailable в отдельной теме, а затем прочитать данные, как только они станут доступны.

Смежные вопросы