如何在GUI程序中处理套接字监听器无限循环?

时间:2011-11-18 06:58:46

标签: c# listener infinite-loop asyncsocket

我正在创建一个简单的异步套接字侦听器,它充当设备的网关。该侦听器将侦听任意端口,并为其他软件提供API以通过网络访问设备。

要创建一个异步套接字监听器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将挂起。如何为监听器提供图形用户界面?我希望有一个不涉及线程的简单解决方案。

1 个答案:

答案 0 :(得分:1)

你可以把循环放在一个单独的线程中。

或者使用上面代码的“asynch”部分:创建套接字时调用BeginAccept,并在回调中完成处理后再次执行。这样你根本不需要信号或循环。