2013-12-18 3 views
-1

Я использую DispacherTimer для автоматического сохранения файла. Код подобен следующему:Почему событие DispacherTimer.Tick происходит два раза?

void beginAutoSave() 
{ 
    _autoSaveDispacherTimer = new DispatcherTimer(); 
    _autoSaveDispacherTimer.Interval = TimeSpan.FromMinutes(1); 
    _autoSaveDispacherTimer.Tick += new EventHandler(onAutoSaveTick); 
    _autoSaveDispacherTimer.Start(); 
} 

void onAutoSaveTick(object sender, EventArgs e) 
{ 
    // I save the file with a randomly generated file name 
} 

Я называю beginAutoSave() только один раз. Проблема в том, что в каждом событии Tick сохраняются два разных файла. Другими словами, метод onAutoSaveTick (...) называется дважды. В обоих вызовах стек вызовов кажется одинаковым. Где моя ошибка?

Любая помощь приветствуется. Спасибо.

+2

А вы * абсолютно уверены * 'beginAutoSave' только выполняет один раз? Что произойдет, если вы установите там точку останова? Можете ли вы воспроизвести это в короткой, но полной программе? –

+0

Где код, в котором вы вызываете 'beginAutoSave()'? – Saggio

+0

Ничего себе, вы догадываетесь, это правильно. Выполняется дважды, хотя я не знаю, почему !!! В любом случае спасибо за помощь. – user3083911

ответ

1

onAutoSaveTick будет называться after every one minute. Вам нужно указать stop explicitly таймер, если вы хотите выполнить его один раз.

От MSDN документации -

срабатывает событие клещ по истечении времени, указанного в интервале истекло. Тик продолжает стрельбу в том же интервале, пока не будет вызван метод Stop .

ли это в самом клеща обработчика:

void onAutoSaveTick(object sender, EventArgs e) 
{ 
    // I save the file with a randomly generated file name 
    _autoSaveDispacherTimer.Stop(); 
} 
+0

Спасибо Vats. Джон прав. Это была глупая ошибка. Я дважды выполнял метод beginAutoSave(). – user3083911