从另一个线程更新GMap.Net C#表单的最佳方法

时间:2015-07-31 15:48:18

标签: c# .net multithreading gmap.net

我发现了很多关于从另一个线程更新GUI的帖子,但是它向各个方向发展。我希望有人可以为我的申请解释更好的方式。

我有一个带有GMap.Net控件的表单来显示地图。我创建了一个线程,它将从数据库中收集Lat,Long位置,进行一些计算,并让GUI在地图上显示这些位置作为标记。

在Form1.cs中:

private void pictureBox1_Click(object sender, EventArgs e)
{
    if (!_acquisitionClick)
    {
        _position.Start();
        _acquisitionClick = true;
    }
}

在DevicePosition.cs中:

public void Start()
{
    _posThread = new Thread(new ThreadStart(StartPositionAcquisition));
    _posThread.Start();
}

public void StartPositionAcquisition()
{
     while(Thread.CurrentThread.IsAlive)
     {
         //Get positions from database and and do some computation
         Thread.Sleep(2000);
     }
}

现在我想根据线程更改的状态更新我的表单,以指示新数据已到达。

最佳方法是什么:

1) Backgroundworker _DoWork()我获取位置并执行计算,_RunWorkerCompleted()我在哪里更新地图。 在此处找到http://www.albahari.com/threading/part3.aspx#_BackgroundWorker

2): 使用Thread与线程中使用的Dispatcher.Invoke方法直接更新地图。如果这是一个很好的解决方案,它在这种情况下如何正常工作? 在此处找到https://stackoverflow.com/a/661662/4010683

3): ThreadProgressEvent这样的事件一起使用,让主线程知道新数据已到达并更新地图应该继续......

4): 我错过了其他什么?

感谢您对此的帮助。顺便说一句,我在Win 7 32位上使用VS 2012和.Net 4.5。

0 个答案:

没有答案