0

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

我有一个带有 GMap.Net 控件的表单来显示地图。我创建了一个线程,它将从数据库中收集经纬度位置,进行一些计算并让 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):使用ThreadDispatcher.Invoke方法直接更新地图。如果这是一个很好的解决方案,那么在这种情况下它是如何工作的?在这里找到 https ://stackoverflow.com/a/661662/4010683

3):使用Thread类似的事件ProgressEvent让主线程知道新数据已经到达并且应该继续更新地图......

4):我还错过了什么?

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

4

0 回答 0