На форме есть таймер, который должен срабатывать раз в 2 минуты:
Me.TimerRefresh.Enabled = True
Me.TimerRefresh.Interval = 2*60*1000
Вот лог его срабатывания:
26.06.2006 15:47:11
26.06.2006 15:49:11
26.06.2006 15:49:14
26.06.2006 15:51:11
26.06.2006 15:53:11
26.06.2006 15:53:14
26.06.2006 15:55:11
Почему таймер иногда по 2 раза срабатывает? И вообще...может ли он 2 раза срабатывать?
PS: процессор вообще не занят, программа между срабатыванием таймера ничего не далает.
В догонку... в чем разница между таймерами находящимися в:
1. System.Threading
2. System.Timers
3. System.Windows.Forms
???
Может у вас эта ситуация:
http://blogs.msdn.com/bclteam/archive/2006/04/24/580064.aspx
Здесь правда другой тип таймера. Но смысла не меняет
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Из MSDN:
System.Threading.Timer is a simple, lightweight timer that uses callback methods and is served by threadpool threads. You might also consider System.Windows.Forms.Timer for use with Windows forms, and System.Timers.Timer for server-based timer functionality. These timers use events and have additional features.
Ну и:
Timers are lightweight objects that enable you to specify a delegate to be called at a specified time. A thread in the thread pool performs the wait operation.
Using the Timer class is straightforward. You create a Timer, passing a TimerCallback delegate to the callback method, an object representing state that will be passed to the callback, an initial raise time, and a time representing the period between callback invocations. To cancel a pending timer, call the Timer.Dispose function.
Note
There are two other timer classes. The System.Windows.Forms.Timer class is a control that works with visual designers and is meant to be used in user interface contexts; it raises events on the user interface thread. The System.Timers.Timer class derives from Component, so it can be used with visual designers; it also raises events, but it raises them on a ThreadPool thread. The System.Threading.Timer class makes callbacks on a ThreadPool thread and does not use the event model at all. It also provides a state object to the callback method, which the other timers do not. It is extremely lightweight.
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Здравствуйте, k_savelev, Вы писали:
_>Может у вас эта ситуация:
_>http://blogs.msdn.com/bclteam/archive/2006/04/24/580064.aspx
_>Здесь правда другой тип таймера. Но смысла не меняет
Здесь все с точностью до наоборот. У меня события наоборот срабатывает чаще чем должно по идее.
Здравствуйте, 4erniyPlasch, Вы писали:
P>В догонку... в чем разница между таймерами находящимися в:
P>1. System.Threading
P>2. System.Timers
P>3. System.Windows.Forms
P>???
Comparing the Timer Classes in the .NET Framework Class Library
Здравствуйте, 4erniyPlasch, Вы писали:
P>В догонку... в чем разница между таймерами находящимися в:
P>1. System.Threading
P>2. System.Timers
P>3. System.Windows.Forms
Джеффри Рихтер. CLR via C#. Программирование на платформе Microsoft.NET Framework 2.0 на языке C#:
История трех таймеров
Библиотека FCL поставляется с тремя таймерами, но для большинства программистов остается загадкой, чем они отличаются. Попробую объяснить.
Класс Timer из пространства имен System.Threading рассматривался в предыдущем разделе. Он лучше других подходит для выполнения периодических фоновых задач в другом потоке.
[В CLR есть лишь один поток, используемый для всех объектов Timer, который осведомлен о времени следующего объекта Timer. Когда приходит время следующего объекта Timer, поток CLR пробуждается и вызывает метод QueueUserWorkltem объекта ThreadPool, чтобы добавить запись в очередь пула потоков для вызова метода обратного вызова. Если метод обратного вызова выполняется долго, таймер может сработать опять. Вполне возможна ситуация, в которой один метод обратного вызова выполняется несколькими потоками из пула.
Будьте внимательны: если метод обращается к совместно используемым данным, лучше добавить блокировки синхронизации потоков, чтобы защитить эти данные от повреждения.]
Класс Timer из пространства имен System.Windows.Forms. Создание экземпляра этого класса указывает Windows на необходимость связать таймер с
вызывающим потоком (см. Win32-функцию SetTimer). Когда таймер срабатывает, Windows добавляет в очередь сообщений потока сообщение таймера (WM_TIMER). Поток должен выполнить прокачку сообщений, чтобы извлечь эти сообщения и передать их нужному методу обратного вызова.
Обратите внимание: вся работа ложится на один поток — установка таймера и обработка метода обратного вызова выполняются одним и тем же потоком. Это предотвращает параллельное выполнение метода таймера несколькими потоками.
Класс Timer из пространства имен System.Timers является, по сути, оболочкой для класса Timer из пространства имен System.Threading. Он заставляет CLR по срабатыванию таймера ставить события в очередь пула потоков. Класс System.Timers.Timer происходит от класса Component из пространства имен System.ComponentModel, что позволяет объекты-таймеры размещать в области конструктора форм в Microsoft Visual Studio. Также члены этого класса немного отличаются от других.
Этот класс был добавлен в FCL давным-давно, когда у Microsoft еще не было четкой концепции потоков и таймеров. Вообще говоря, его стоило бы удалить, чтобы вместо него применялся класс System.Threading.Timer. Я никогда не использую класс System.Timers.Timer и вам не советую, за исключением случаев, когда нужно поместить таймер в область конструктора форм.
... << RSDN@Home 1.2.0 alpha rev. 668>>