c# - 放大地图时出现 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);
}