2015-07-08 2 views
1

Я пытаюсь реализовать таймер для флажка. Связывание для флажка выполняется с использованием свойства CaptureColorBind. Когда я когда-либо нажимаю флажок захвата цвета (captureColor = true), его необходимо проверить в течение 5 секунд, а затем флажок необходимо снять. Я пытаюсь распечатать дату и время до и после таймера для проверки. Его печать до времени должным образом, но время datetime, которое я печатаю в обработчике прошедшего события, печатается n раз в зависимости от того, сколько раз я нажимаю флажок цвета захвата. Это первый раз, когда я нажимаю, он печатает дату и время один раз, второй раз, когда я нажимаю, он печатает дважды и так далее. Не уверен, что я делаю неправильно.C# Таймер внутри свойства

private System.Timers.Timer timer = new System.Timers.Timer(); 
public bool CaptureColorBind 
    { 
     get 
     { 
      return this.captureColor; 
     } 

     set 
     { 
      this.captureColor = value; 
      if (captureColor == true) 
      { 
       Console.WriteLine(DateTime.Now.ToString()); 
       Console.WriteLine(); 
       timer.Elapsed += new ElapsedEventHandler(capturecolor_timer); 
       timer.Interval = 5000; 
       timer.Enabled = true; 
      } 
      if (null != this.PropertyChanged) 
      { 
       this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("CaptureColorBind")); 
      } 
     } 
    } 

    // Timer for capturecolor checkbox  
    private void capturecolor_timer(object sender, ElapsedEventArgs e) 
    { 
      timer.Enabled = false; 
      this.captureColor = false; 
      //this.colorCheckbox.IsChecked = false; 
      Console.WriteLine(DateTime.Now.ToString()); 
      Console.WriteLine(); 
      if (null != this.PropertyChanged) 
      { 
       this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("CaptureColorBind")); 
      } 
    } 

ответ

3

Вы добавляете новый обработчик событий каждый раз, когда значение установлено. Вы должны добавить его только один раз.

Попробуйте добавить обработчик событий в конструктор объекта, чтобы он только установил один раз и просто снова включил таймер, когда свойство установлено.

private System.Timers.Timer timer = new System.Timers.Timer(); 
public MyObject() 
{ 
    timer.Elapsed += new ElapsedEventHandler(capturecolor_timer); 
    timer.Interval = 5000; 
} 
+0

Отлично, это работает. спасибо – Santosh

Смежные вопросы