private void ListenerThread() { _receivingUdpClient.ExclusiveAddressUse = false; _receivingUdpClient.Connect(new IPEndPoint(IPAddress.None, ClientPort)); while (true) { try { IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, ClientPort); // Blocks until a message returns on this socket from a remote host. Byte[] receiveBytes = _receivingUdpClient.Receive(ref remoteIpEndPoint); if (receiveBytes.Length == 0) { return; } NetCommand cmd = NetCommand.Parse(receiveBytes); IPAddress sender = remoteIpEndPoint.Address; lock (_incomingQueue) { _incomingQueue.Push(new NetPackage() { NetCommand = cmd, Sender = sender }); Debug.WriteLine($"Queue count: {_incomingQueue.Count}"); } Debug.WriteLine("Network data received!"); if (NetworkEvent != null) { Debug.WriteLine("Invoking event handlers: " + NetworkEvent.GetInvocationList().Length); } else { Debug.WriteLine($"No event handlers attached! Read from queue manually"); } NetworkEvent?.Invoke(cmd, sender); } catch (SocketException e) { Debug.WriteLine(e); throw; } } }