Я использую 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);
}