最近在做车辆位置实时更新,每隔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;
明白了?
@花飘水流兮: 添加状态量当拖拽地图的时候位置不会更新,当程序长时间运行地图上还是会出现大红叉,不能达到我的效果。