2017-02-14 122 views
0

我需要在C#中更新我的GMap.NET标记。 我说我的标志象下面这样:更新C#中的GMap.NET标记#

GMap.NET.WindowsForms.GMapMarker marker2 = 
       new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
        new GMap.NET.PointLatLng(39.81750, 30.52686), 
        new Bitmap("hello.png")); 
      marker2.ToolTipText = "Hello"; 
      marker2.ToolTip.Fill = Brushes.Black; 
      marker2.ToolTip.Foreground = Brushes.White; 
      marker2.ToolTip.Stroke = Pens.Black; 
      markers.Markers.Add(marker2); 
      gMapControl1.Overlays.Add(markers); 

我想更新这个标记在一个计时器位置。 如何在计时器线程中更改此变量? 我是否需要将这些标记全局变量? 感谢您的回答。

回答

0

你需要覆盖传递到计时器:

System.Timers.Timer t = new System.Timers.Timer(); 
GMapOverlay overlay_ = new GMapOverlay(); 
//do stuff to your overlay 
t.Elapsed += (sender, e) => MyElapsedMethod(sender, e, overlay_); 

您的叠加层的所有引用,因此您可以简单地更新标记,并应在地图上更新(假设你已经将其添加到gmapcontrol ):

static void MyElapsedMethod(object sender, System.Timers.ElapsedEventArgs e, GMapOverlay overlay) 
{ 
    overlay.Markers[..].Position = new PointLatLng(0,0); //for your new position 
} 

我还没有测试过这段代码,但是我使用后台工作来做类似的事情我有很好的成功。

+0

好的。我怎样才能在上述代码的相同上下文中更改标记变量? –

+0

我希望能够将标记作为变量调用并更改它们。我如上所述宣布它们,但无法将它们作为变量。我对c#有一点认识。对不起,我的问题。 –

+0

您需要填充标记的List,您可以使用Tag属性来区分它们,只需将它传递给唯一的任意ID即可。然后过滤该标识的标记列表并更新位置。国际海事组织,你不需要通过列表或覆盖到计时器,只要把他们在一个领域。 – rdoubleui