Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 08.06.2011, 13:22   #1
Феска
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 20
По умолчанию Поведение System.Timers.Timer

Доброго времени суток !

Помогите разобраться с логикой работы данного таймера. Смотрим следующий код:
Код:
public class Service
    {
        private Timer _timerForApplication = new Timer();

        private void StartTimerForApplication(string time)
        {
            _timerForApplication.Interval = 10000;
            Console.WriteLine("The service will be executed within " + TimeSpan.FromMilliseconds(_timerForApplication.Interval).TotalSeconds + " sec.");
            _timerForApplication.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            _timerForApplication.Start();

        }

        public void Start()
        {
            StartTimerForApplication("100");
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            try
            {
                _timerForApplication.Stop();
               
                StartTimerForApplication("100");
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
    }
Запуск экземпляра осуществляется с помощью метода Start.
Итак, в чем прикол или что мне непонятно. Первый раз все происходит нормально, запускается событие таймера один раз, однако после первого запуска, через 10 секунд уже отрабатывает два события!! После 30 секунд работы приложения возникает 4 события !! и так далее , в геомертической последовательности.

Может кто-нибудь объснить мне логику работы этого таймера ? )
Результаты выполнения программы:

Заранее спасибо за помощь!
Заранее прошу ответы не ПО ТЕМЕ не оставлять!

Последний раз редактировалось Феска; 08.06.2011 в 13:32.
Феска вне форума Ответить с цитированием
Старый 08.06.2011, 14:25   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Может кто-нибудь объснить мне логику работы этого таймера ?

таймер не при чём, виноват вот этот код:

Код:
_timerForApplication.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
его нужно выполнить один раз, а не каждый раз при запуске таймера.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.06.2011, 14:45   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

дык а зачем вы каждый раз новый обработчик то добавляете?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.06.2011, 17:43   #4
Феска
Пользователь
 
Регистрация: 16.11.2007
Сообщений: 20
По умолчанию События

Я балда, действительно, создаю цепочку событий для таймера. Спасибо за быстрые ответы!
Феска вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение диска С DRAgon™ Компьютерное железо 20 12.03.2011 22:59
Странное поведение gets alex_alpha Общие вопросы C/C++ 3 27.03.2010 18:21
System.Net и System.Net.Sockets Adwenturer Общие вопросы .NET 4 08.02.2010 22:08
поведение браузеров Antoha HTML и CSS 2 30.05.2009 21:09
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 13:02


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя