【问题标题】:How to handle socket listener infinite loop in GUI program?如何在 GUI 程序中处理套接字侦听器无限循环?
【发布时间】:2011-11-18 06:58:46
【问题描述】:

我正在创建一个简单的异步套接字侦听器,它充当设备的网关。此侦听器将侦听任意端口并为其他软件提供 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 会挂起。如何为侦听器提供图形用户界面?我希望有一个不涉及线程的简单解决方案。

【问题讨论】:

  • 您正在使用线程——请参阅AsyncCallback 的文档。
  • @DavidSchwartz - 感谢您的更正:) - 我不知道。在 C# 中使用异步套接字侦听器 API 比自己生成和管理线程要简单得多

标签: c# listener infinite-loop asyncsocket


【解决方案1】:

您可以将循环放在单独的线程中。

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

【讨论】:

  • 你能给我指出学习线程的正确文档吗?好像没有别的办法了。另外,当我为无限循环生成线程时,BeginAccept 方法会生成新线程吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2021-01-11
  • 2017-01-28
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多