首页 > 解决方案 > 放大地图时出现 GMap.Net System.InvalidOperationException

问题描述

我使用 GMap.Net 并通过 UDP 与 Flightgear 应用程序通信。虽然数据是通过 udp 套接字接收的,但在地图上缩放会产生一个错误,即“System.InvalidOperationException”。我认为 udpreceive 方法应该与 UI 线程同步,但我没有任何经验,怎么可能?提前致谢。

这是我的代码;

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);
        }

标签: c#gmap.net

解决方案


推荐阅读