2017-02-14 120 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