public void ReceiveCallBack(IAsyncResult Result) { var Args = (object[])Result.AsyncState; var UdpClient = (UdpClient)Args[0]; byte[] Data = UdpClient.EndReceive(Result, ref _LocalEntryPoint); string Message = Encoding.ASCII.GetString(Data); string[] MessageParts = Message.Split(':'); switch (MessageParts[0]) { case "iam": Host.AddHost(MessageParts[1], _LocalEntryPoint.Address.ToString(), _LocalEntryPoint.Port.ToString()); break; case "give": SearchWindow.Search(MessageParts[1], _LocalEntryPoint.Address.ToString()); break; case "have": SearchWindow.NewResult(MessageParts[1], MessageParts[2], _LocalEntryPoint.Address.ToString()); break; } UdpClient.BeginReceive(ReceiveCallBack, Args); }