Я пытаюсь абстрагироваться system.threading.timer основаны от этой статьи: http://www.derickbailey.com/CommentView,guid,783f22ad-287b-4017-904c-fdae46719a53.aspxТаймер стрельбы на неверном интервале
Однако, кажется, таймер стрельбы в соответствии с неправильным параметром
В классе ниже мы имеем эту линию
timer = new System.Threading.Timer(o => TimerExecute(), null, 1000, 30000);
Это должно означать, ждать в течение 1 секунды перед стартом, затем огонь каждые 30 секунд
Однако код стреляет каждый второй
, что я сделал неправильно
public interface ITimer
{
void Start(Action action);
void Stop();
}
public class Timer : ITimer, IDisposable
{
private TimeSpan timerInterval;
private System.Threading.Timer timer;
private Action timerAction;
private bool IsRunning { get; set; }
public Timer(TimeSpan timerInterval)
{
this.timerInterval = timerInterval;
}
public void Dispose()
{
StopTimer();
}
public void Start(Action action)
{
timerAction = action;
IsRunning = true;
StartTimer();
}
public void Stop()
{
IsRunning = false;
StopTimer();
}
private void StartTimer()
{
timer = new System.Threading.Timer(o => TimerExecute(), null, 1000, Convert.ToInt32(timerInterval.TotalMilliseconds));
}
private void StopTimer()
{
if (timer != null)
{
timer.Change(Timeout.Infinite, Timeout.Infinite);
timer.Dispose();
timer = null;
}
}
private void TimerExecute()
{
try
{
StopTimer();
timerAction();
}
finally
{
if (IsRunning)
StartTimer();
}
}
}
Вы передаете timerInterval в класс Timer и используете это позже, чтобы установить интервал повтора. Какова ценность timerInterval? –
Я изменил код на твердое кодированное значение, чтобы вставить его здесь. Угадайте, что только что вызвало путаницу, хотя – ChrisCa