не срабатывает Timer Callback

 
0
 
.NET
ava
binomer | 24.03.2013, 10:51
Добрый день! Решил написать схему переключения светофора, основанную на событиях. Заодно опробовал System.Threading.Timer. Получился вот такой код.

Проблема заключается в том, что не включаются события, определенные в TimerGreen, TimerRed, TimerYelllow

    class LightEvent
    {
        public delegate void LightEventHandler();

        public event LightEventHandler Green;
        public event LightEventHandler Yellow;
        public event LightEventHandler Red;

        System.Threading.Timer timer;
        TimerCallback tcb;
        private int interval;

        private int green;
        private int yellow;
        private int red;

        public LightEvent(int _green, int _yellow, int _red)
        {
            green = _green * 1000;
            yellow = _yellow * 1000;
            red = _red * 1000;
        }

        public void DoWorkLight()
        {
            interval = green;
            tcb = TimerGreen;
            for (int i = 0; i < 10000; i++)
            {
                timer = new System.Threading.Timer(tcb, false, interval, 0);
                timer.Dispose();
            }
        }


        public void TimerGreen(object source)
        {
            if (Yellow != null)
                Yellow();
            tcb = TimerYellow;
            interval = yellow;
        }

        public void TimerYellow(object source)
        {
            if (Red != null)
                Red();
            tcb = TimerRed;
            interval = red;
        }
        public void TimerRed(object source)
        {
            if (Green != null)
                Green();
            tcb = TimerGreen;
            interval = green;
        }
    }


Объясните, пожалуйста, в чем тут дело.
Kommentare (4)
ava
diadiavova | 24.03.2013, 10:41 #
Цитата (binomer @  24.3.2013,  10:51 findReferencedText)
    timer = new System.Threading.Timer(tcb, false, interval, 0);
     timer.Dispose();

Полностью в код не вникал, но тут ты создаешь таймер и тут же его уничтожаешь. Ессно после этого поднимать события он не сможет.
ava
binomer | 24.03.2013, 10:59 #
Цитата (diadiavova @ 24.3.2013,  10:41)
Цитата (binomer @  24.3.2013,  10:51 \\"findReferencedText\\")
    timer = new System.Threading.Timer(tcb, false, interval, 0);
     timer.Dispose();


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

окей, спасибо за подсказку, но если не уничтожать, то форма, где используется данный метод (т.е. начинает работать таймер) закрывается после первого же срабатывания таймера.
ava
diadiavova | 24.03.2013, 11:21 #
Цитата (binomer @  24.3.2013,  11:59 findReferencedText)
но если не уничтожать, то форма, где используется данный метод (т.е. начинает работать таймер) закрывается после первого же срабатывания таймера. 

Честно говоря, я в твоем коде многого не понял. Например мне непонятно для чего тебе 10тыщ таймеров, когда для работы светофора достаточно одного? Ну и можно было переключать одним методом. Так что ничего сказать по поводу закрытия формы не могу.
ava
phomm | 24.03.2013, 20:50 #
Есть вот такое http://programmersforum.ru/showthread.php?t=230009
Но там нет потоков и событий, всё на 1 таймере. Надо ?
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden