2011-11-18 2 views
0

장치에 대한 게이트웨이 역할을하는 간단한 비동기 소켓 수신기를 만들고 있습니다. 이 수신기는 임의의 포트를 수신하고 다른 소프트웨어가 네트워크를 통해 장치에 액세스하기위한 API를 제공합니다. GUI 프로그램에서 소켓 수신기 무한 루프를 처리하는 방법은 무엇입니까?

비동기 소켓 리스너, based on this article on MSDN를 만들려면,이 같은 무한 루프를 만들 수 있습니다

while (true) { 
    // Set the event to nonsignaled state. 
    allDone.Reset(); 

    // Start an asynchronous socket to listen for connections. 
    Console.WriteLine("Waiting for a connection..."); 
    listener.BeginAccept( 
     new AsyncCallback(AcceptCallback), 
     listener 
    ); 

    // Wait until a connection is made before continuing. 
    allDone.WaitOne(); 
} 

콘솔 프로그램 프로토 타입은 잘 실행됩니다. 그러나, 나는 비동기 소켓 리스너의 GUI 버전을 만들 계획이다. GUI에서 무한 루프를 수행하면 GUI가 중단된다는 것을 알고 있습니다. 청취자에게 그래픽 사용자 인터페이스를 제공하려면 어떻게합니까? 나는 스레드를 포함하지 않는 간단한 솔루션을 기대하고있다.

+0

스레드를 사용하고 있습니다. [AsyncCallback] (http://msdn.microsoft.com/en-us/library/system.asynccallback.aspx)의 설명서를 참조하십시오. –

+0

@DavidSchwartz - 수정 해 주셔서 감사합니다 :) - 나는 그것을 몰랐습니다. C#에서 비동기 소켓 리스너 API를 사용하면 스레드를 직접 생성하고 관리하는 것보다 훨씬 간단합니다. – rickchristie

답변

1

루프를 별도의 스레드에 넣을 수 있습니다.

위의 코드에서 "asynch"부분을 사용하십시오. 소켓이 생성되면 BeginAccept을 호출하고 콜백에서 처리가 완료되면 다시 수행하십시오. 이렇게하면 신호 나 루프가 전혀 필요 없습니다.

+0

스레드 학습을위한 올바른 설명서를 가르쳐 주시겠습니까? 다른 방법이없는 것 같습니다. 또한 무한 루프에 대한 스레드를 생성 할 때'BeginAccept' 메서드가 새 스레드를 생성합니까? – rickchristie

+1

찾았 음 http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx – rickchristie

관련 문제