private void thread() { UdpClient ucl = new UdpClient(6000); IAsyncResult iar = ucl.BeginReceive(null, null); while (!exit) { if (!iar.AsyncWaitHandle.WaitOne(1000)) { continue; } IPEndPoint ep = new IPEndPoint(0, 0); byte[] data = ucl.EndReceive(iar, ref ep); iar = ucl.BeginReceive(null, 0); using (MemoryStream ms = new MemoryStream(data)) { BinaryReader br = new BinaryReader(ms); while (ms.Position < ms.Length) { CanMessage m = CanMessage.DeserializeFrom(br); if (MessageReceived != null) { MessageReceived(this, m); } } } } ucl.Close(); }