Как обработать сокет слушателя бесконечного цикла в программе GUI? - PullRequest
0 голосов
/ 18 ноября 2011

Я создаю простой асинхронный слушатель сокетов, который действует как шлюз для устройств. Этот слушатель прослушивает произвольный порт и предоставляет API для другого программного обеспечения для доступа к устройствам по сети.

Чтобы создать слушатель асинхронного сокета, на основе этой статьи на 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 для слушателя асинхронного сокета. Я знаю, что если я сделаю бесконечный цикл в графическом интерфейсе, графический интерфейс будет зависать. Как дать графический интерфейс для слушателя? Я надеюсь на простое решение, которое не связано с потоками.

1 Ответ

1 голос
/ 18 ноября 2011

Либо вы можете поместить цикл в отдельный поток.

Или использовать часть "asynch" приведенного выше кода: когда сокет создан, вызовите BeginAccept, а в обратном вызове сделайте это снова, когда закончитес обработкой.Таким образом, вам вообще не нужны сигналы или петли.

...