Компонент Indy UDP-сервера, похоже, зависит от сообщений Windows, так как я вижу, что новые сообщения появляются, только когда курсор мыши перемещается над формой, содержащей серверный компонент.
Я создал компонент во время выполнения, используя этот код:
private
{ Private declarations }
Srv: TIdUDPServer;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Srv := TIdUDPServer.Create(Self);
Srv.DefaultPort := 9009;
Srv.OnUDPRead := Self.udpServerUDPRead;
Srv.Active := True;
end;
Я бы предпочел консольное или сервисное приложение. Нужен ли (невидимый) дескриптор окна + некоторый код очереди сообщений Windows, чтобы этот компонент работал?
Обновление: некоторая (неофициальная) документация говорит:
TIdUDPServer, когда активно создает поток прослушивания для прослушивания
входящие пакеты UDP. ... Когда ThreadedEvent имеет значение false, OnUDPRead
Событие будет запущено в контексте основного потока программы. когда
ThreadedEvent имеет значение true, событие OnUDPRead вызывается в контексте
поток слушателя.