Compact Framework 2.0 응용 프로그램 중 하나에서 TcpClient
을 사용하고 있습니다. TCP 서버에서 정보를 받고 싶습니다.C# : Compact Framework에서 AsyncWaitHandle을 설정하는 방법?
Compact Framework는 "대형"프레임 워크의 시간 초과 메커니즘을 지원하지 않으므로 시간 초과 작업을 구현하려고합니다. 기본적으로, 나는 다음을 수행 할 :
IAsyncResult result = networkStream.BeginRead(buffer, 0, size, ..., networkStream);
if (!result.AsyncWaitHandle.WaitOne(5000, false))
// Handle timeout
private void ReceiveFinished(IAsyncResult ar)
{
NetworkStream stream = (NetworkStream)ar.AsyncState;
int numBytes = stream.EndRead(ar);
// SIGNAL IASYNCRESULT.ASYNCWAITHANDLE HERE ... HOW??
}
나는 IAsyncResult.AsyncWaitHandle
에 대한 Set
를 호출하고 싶습니다하지만 이러한 방법이없는 나는이에 캐스팅되는 구현 모른다.
대기 핸들을 어떻게 설정합니까? 또는 EndRead
을 호출하여 자동으로 설정됩니까? 설명서는 내가 Set
라고 불러야한다고 제안합니다 ...
어떤 도움을 주셔서 감사합니다!
UPDATE
는 EndRead
를 호출 할 때 대기 핸들이 자동으로 설정되어 있는지 보인다 -하지만 문서에없는. 누군가 이것을 확인할 수 있습니까? 2
UPDATE 내 샘플 코드에 client.BeginRead
를 썼다. 물론 BeginRead
이 NetworkStream
에 호출되었습니다 ...
안녕하세요, 물론 당신이 옳아 요 - 그게 내가 뭘하는지입니다. 실제로 스트림 (위에서 업데이트 된 코드 샘플)에 대한 읽기를 시작합니다. 질문 : WaitHandle이 자동으로 신호를 받습니까? 워드 프로세서에서는 비동기 읽기가 완료 될 때까지 기다리기 위해 핸들이 설정 될 때까지 기다려야한다고 명시합니다. 나는 핸들이 EndRead를 통해 암시 적으로 설정되었다고 가정하지만, 이것을 확인할 수 있습니까? –
설명서를 확인하고 "WaitOne()을 주 스레드에서 호출하고 콜백에서 Set()을 호출합니다"라고 표시된 부분을 발견했습니다. 문서가 잘못 작성되었습니다. 이 비트는 협력 스레드를 동기화하는 데 사용할 수있는 ManualResetEvent()와 같은 별도의 Waithandle을 나타냅니다.샘플 코드는 별도의 동기화 구조 ('allDone')를 보여줍니다. 불행히도 이것은 부분 코드이며 해당 변수의 초기화 또는 선언을 보여주지 않으므로 가정합니다. 그러나 그것은 IAsyncResult가 아니라는 것이 분명합니다. 최종선 : IAsyncResult에서 Set()을 호출 할 필요가 없습니다. – Cheeso
그 점에 대해 감사드립니다. 이것은 제 코드에서하고있는 것과 정확히 같습니다. 나에게 잘하고있다 .-) –