GMap. Net System.InvalidOperationException при увеличении карты - PullRequest
0 голосов
/ 27 марта 2020

Я использую GMap. Net и общаюсь с приложением Flightgear по UDP. Хотя данные получают через сокет udp, при масштабировании карты выдается ошибка «System.InvalidOperationException». Я думаю, что метод udpreceive должен быть синхронизирован с потоком пользовательского интерфейса, но у меня нет никакого опыта с этим, как это может быть? Заранее спасибо.

Вот мой код;

private void udpReceive(IAsyncResult ar)
        {
            byte[] udp_buffer = udp.EndReceive(ar, ref endPoint);
            string udp_message = Encoding.ASCII.GetString(udp_buffer);
            string[] udp_chunks = udp_message.Substring(0, udp_message.Length - 1).Split('|');

            fg_lat = Convert.ToDouble(udp_chunks[1]) / 1000000;
            fg_longt = Convert.ToDouble(udp_chunks[2]) / 1000000;
            fgaircraft_overlay.Clear();
            GMapMarker fgaircraft_marker = new GMarkerGoogle(
                    new PointLatLng(fg_lat, fg_longt),
                    fgaircraft_bm);
            fgaircraft_marker.Offset = new Point(-25, -22);
            Task.Run(() => fgaircraft_overlay.Markers.Add(fgaircraft_marker));
            Task.Run(()=>gmap.Overlays.Add(fgaircraft_overlay));

            fgairspeedLabel.Text = "Airspeed: " + udp_chunks[0];
            fglongitudeLabel.Text = "Longitude: " + udp_chunks[1];
            fglatitudeLabel.Text = "Latitude: " + udp_chunks[2];
            fgaltitudeLabel.Text = "Altitude: " + udp_chunks[3];
            fgrollLabel.Text = "Roll: " + udp_chunks[4];
            fgpitchLabel.Text = "Pitch: " + udp_chunks[5];
            fgheadingLabel.Text = "Heading: " + udp_chunks[6];

            udp.BeginReceive(new AsyncCallback(udpReceive), null);
        }
...