2010-02-05 2 views
1

네트워크 기반 콘솔 기반 응용 프로그램을 만들려고하지만 동시에 표준 입력과 소켓 입력을 동시에들을 수 있어야합니다. C++에서는 posix select() 함수를 사용했지만 C#에서는 the equivalent select function이 소켓에만 사용됩니다. 여러 스레드를 사용하지 않고도 C#의 두 입력을 모두들을 수있는 방법이 있습니까?C#에서 표준 스레드와 소켓에서 동일한 스레드를 수신하는 방법은 무엇입니까?

답변

1

여러 입력을 기다리려면 각 입력에 대해 WaitHandle이 필요하며 정적 메서드 WaitHandle.WaitAny을 호출합니다.

그러나 다른 옵션은 비동기 IO를 사용하는 것입니다. BeginXXXX을 사용하여 읽기/받기 작업을 시작하십시오. 완료 될 때마다 실행될 각 경우에 콜백을 제공합니다. 시작한 후에는 모니터 객체를 기다리고 콜백에서 해당 모니터 객체를 펄스하여 완료를 알립니다. 이것은 멀티 스레딩 프로그래밍의 매우 효율적인 형식이지만 스레드를 명시 적으로 시작할 필요는 없습니다.

표준 입력에 원시 스트림을 얻으려면 Console.OpenStandardInput을 사용하십시오.

+0

이것은 좋은 해결책 인 것 같습니다. 네트워크 스트림을 사용하여이를 수행하는 방법을 보았습니다. 그러나 표준을 사용하여 동일한 작업을 수행하는 방법은 무엇입니까? – Nayruden

+0

업데이트보기 (마지막 라인) –

관련 문제