首页 新闻 会员 周边

c#车辆位置更新,lock锁的应用问题

0
悬赏园豆:5 [已解决问题] 解决于 2017-12-09 10:45

最近在做车辆位置实时更新,每隔10秒更新一次,当车辆位置发生改变的时候,重绘车辆,但是重绘的过程当放大缩小地图或者拖拽地图,会出现错误,是地图重绘的时候发生的错误,请问当拖拽地图时,如何阻止更新的线程运行。

问题补充:

  添加了一个线程用于计时,当到0秒的时候更新车辆位置,是否是线程冲突?,请问如何运用lock,当拖拽地图或者缩放地图时,不更新呢?

timerTickThread = new Thread(() =>
            {
                while (true)
                {
                    if (timeLb.IsHandleCreated)

                    {
                        for (int Time = 10; Time >= 0; Time--)
                        {
                            try
                            {
                                timeLb.BeginInvoke(new MethodInvoker(() => timeLb.Text = Convert.ToString(Time) + "秒后刷新"));
                                Thread.Sleep(1000);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.ToString());
                                MessageBox.Show(ex.ToString());
                            }
                        }
                    }
                    try
                    {
                        UpdateVehiclePosition();//更新车辆位置方法
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            });
            timerTickThread.IsBackground = true;
            timerTickThread.Start();

fantasy2121的主页 fantasy2121 | 初学一级 | 园豆:199
提问于:2017-12-05 11:24
< >
分享
最佳答案
0

原因:车辆重绘线程与地图重绘线程同时执行一个函数,导致数据的混乱。

在重绘车辆的时候添加lock,防止线程冲突。主要学习一下lock的使用。

fantasy2121 | 初学一级 |园豆:199 | 2017-12-09 08:55
其他回答(1)
0

加个状态量。

原则上你的拖放和更新是不应该错误的,因为重绘是函数invoke,里面进行了管理的。你应该检查你的所谓重绘写得是否有问题。

收获园豆:5
花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-05 12:22

请问如何加状态量呢

支持(0) 反对(0) fantasy2121 | 园豆:199 (初学一级) | 2017-12-05 14:51

@fantasy2121: bool IsLeftMouseDown = false;

明白了?

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-05 17:27

@花飘水流兮: 添加状态量当拖拽地图的时候位置不会更新,当程序长时间运行地图上还是会出现大红叉,不能达到我的效果。

支持(0) 反对(0) fantasy2121 | 园豆:199 (初学一级) | 2017-12-09 08:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册