2011-07-27 4 views
5

Networkstream.Read() 스레드를 차단하는 방법을 궁금합니다. NetworkStream.Read()이 서버에서 데이터를 기다리고있는 별도의 스레드가 있습니다. 사용자가 서버에 데이터를 보내는 버튼을 누르는 것으로 가정합니다. 그러나 NetworkStream.Write()으로 전화 할 수는 없지만 데이터를 기다리는 다른 스레드에는 NetworkStream.Read()이 있습니다. 나는 매번 NetworkStream을 잠글 수 있지만 NetworkStream.Read()은 스레드를 차단하여 적어도 1 바이트 이상 읽을 때까지 데이터를 보낼 수 없습니다. http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspxC# NetworkStream write() and read()

답변

0

는 NetworkStream 클래스는 블로킹 모드 스트림 소켓을 통해 데이터를 전송 및 수신 방법을 제공합니다에 설명 된대로 비 차단을 사용해야합니다

7

당신은는 NetworkStream의 인스턴스에서 동시에 수행 할 수 MSDN docs

읽기에서 문서에 명시된 바와 같이 동시에 readwrite를 발행하고 쓰기 작업을 할 수 있습니다 참조 동기를 필요로하지 않는 클래스입니다. 쓰기 작업에 대해 하나의 고유 한 스레드와 읽기 작업에 대해 하나의 고유 한 스레드가있는 한 읽기 스레드와 쓰기 스레드간에 상호 간섭이 발생하지 않으며 동기화가 필요하지 않습니다.

2

일부 기간에는 NetworkStream.DataAvailable 속성을 쿼리하고 해당되는 경우에만 읽기만 할 수 있습니다. "DataAvailable이 true이면 Read 호출이 즉시 반환됩니다." 그래서 당신은 시내를 막지 않을 것입니다.