void Run()
        {
            if (udpAddress != null)
            {
                UdpPort udp = new UdpPort();
                udp.Connect(udpAddress);

                IPEndPoint remote = udp.WaitForOneMessage(TimeSpan.FromSeconds(10));
                if (remote == null)
                {
                    Console.WriteLine("### Error: not getting any messages from " + udpAddress);
                    return;
                }
                port = udp;
            }
            else if (comPortName != null)
            {
                SerialPort serial = new SerialPort();
                serial.Connect(comPortName, DefaultComBaudRate);
                port = serial;
            }
            if (proxyAddress != null)
            {
                proxyPort = new UdpPort();
                proxyPort.Connect(new IPEndPoint(udpAddress.Address, 0), proxyAddress);
                proxyChannel = new MavlinkChannel();
                proxyChannel.MessageReceived += OnProxyMessageReceived;
                proxyChannel.Start(proxyPort);
            }

            MavlinkChannel channel = new MavlinkChannel();
            channel.MessageReceived += OnMessageReceived;
            channel.Start(port);
        }
        private void OnUdpConnect(object sender, RoutedEventArgs e)
        {
            if (port != null)
            {
                port.Close();
                port = null;
                OnPortClosed();
            }
            else
            {
                var model = (NetworkModel)NetworkList.SelectedItem;
                IPAddress addr = null;
                if (model.Network != null)
                {
                    foreach (UnicastIPAddressInformation ip in model.Network.GetIPProperties().UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            addr = ip.Address;
                        }
                    }
                }
                else
                {
                    addr = IPAddress.Parse("127.0.0.1");
                }

                int i = 0;
                if (int.TryParse(PortNumber.Text, out i))
                {
                    var udp = new UdpPort();
                    udp.Connect(new IPEndPoint(addr, i), null);
                    OnPortConnected(udp);
                    UdpConnectButton.Content = "Disconnect";
                }
            }
        }