У меня есть приложение, которое перемещает машину по указанным местам на карте. Я использую приведенный ниже код для достижения этой функциональности. Но теперь я хочу установить продолжительность для этого. Я имею в виду, что машина должна добраться в определенное время от начала до конца. Как мне это сделать. Я передаю продолжительность таймеру, как показано в коде.
public class PathAnimation
{
private const int _delay = 30;
private DispatcherTimer _timerId;
private int? _duration;
private int _frameIdx = 0;
private bool _isPaused;
private DateTime _timerStart = DateTime.Now;
public PathAnimation(IntervalCallback intervalCallback,int? duration)
{
_duration = duration;
_timerId = new DispatcherTimer();
_timerId.Interval = new TimeSpan(0, 0, 0, 0, _delay);
_timerId.Tick += (s, a) =>
{
if (!_isPaused)
{
if (intervalCallback != null)
{
intervalCallback(AppGlobals._intervalLocs[_frameIdx], AppGlobals._intervalIdx[_frameIdx], _frameIdx);
}
if ((DateTime.Now - _timerStart).TotalMilliseconds >= _duration.Value)
{
_timerId.Stop();
}
_frameIdx++;
}
};
}
public delegate void IntervalCallback(BasicGeoposition loc, int pathIdx, int frameIdx);
public void Play()
{ _timerStart = DateTime.Now;
_frameIdx = 0;
_isPaused = false;
_timerId.Start();
}
public void Pause()
{
_isPaused = true;
}
public void Stop()
{
if (_timerId.IsEnabled)
{
_frameIdx = 0;
_isPaused = false;
_timerId.Stop();
}
}
}
Но теперь происходит то, что машина достигает скорости быстрее, чем время продолжительности, и вызывает ошибку вне индекса на intervalCallback(AppGlobals._intervalLocs[_frameIdx], AppGlobals._intervalIdx[_frameIdx], _frameIdx);