最近在做车辆位置实时更新,每隔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();
原因:车辆重绘线程与地图重绘线程同时执行一个函数,导致数据的混乱。
在重绘车辆的时候添加lock,防止线程冲突。主要学习一下lock的使用。
加个状态量。
原则上你的拖放和更新是不应该错误的,因为重绘是函数invoke,里面进行了管理的。你应该检查你的所谓重绘写得是否有问题。
请问如何加状态量呢
@fantasy2121: bool IsLeftMouseDown = false;
明白了?
@花飘水流兮: 添加状态量当拖拽地图的时候位置不会更新,当程序长时间运行地图上还是会出现大红叉,不能达到我的效果。