public void Start() { try { Udp = new UdpClient(Port); } catch (Exception) { throw; } Running = true; Task.Run(async() => { while (true) { var result = await Udp.ReceiveAsync().ConfigureAwait(false); UdpReceived?.Invoke(this, result); UdpReceiveBytes?.Invoke(this, result.Buffer); UdpReceiveString?.Invoke(this, Encoding.Default.GetString(result.Buffer)); } }); }
public async void FindDeviceAroundAsync() { try { List <Device> devicesFound = new List <Device>(); while (true) { devicesFound.Clear(); TaskCompletionSource <bool> gotMsg = new TaskCompletionSource <bool>(); UdpReceived ev = (remote, arg) => { if (arg.Handled) { return; } var msg = arg.Mess; if (msg.Type == MsgType.Info && msg.Pin == 100000) { devicesFound.Add(new Device { Addr = remote.Address.ToString(), Name = msg.DeviceName, Time = DateTime.Now }); gotMsg.SetResult(true); } }; OnUdpReceived += ev; await gotMsg.Task; OnUdpReceived -= ev; OnDeviceFound?.Invoke(devicesFound); } } catch (OperationCanceledException) { } }