Windows.Forms.Timer
От: 4erniyPlasch Россия  
Дата: 26.06.06 12:01
Оценка:
На форме есть таймер, который должен срабатывать раз в 2 минуты:

   Me.TimerRefresh.Enabled = True
   Me.TimerRefresh.Interval = 2*60*1000


Вот лог его срабатывания:


Почему таймер иногда по 2 раза срабатывает? И вообще...может ли он 2 раза срабатывать?

PS: процессор вообще не занят, программа между срабатыванием таймера ничего не далает.
Re: Windows.Forms.Timer
От: 4erniyPlasch Россия  
Дата: 26.06.06 12:08
Оценка:
В догонку... в чем разница между таймерами находящимися в:


???
Windows.Forms.Timer
От: Аноним  
Дата: 26.06.06 12:07
Оценка:
Может у вас эта ситуация:
http://blogs.msdn.com/bclteam/archive/2006/04/24/580064.aspx

Здесь правда другой тип таймера. Но смысла не меняет
SUNETA Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Windows.Forms.Timer
От: Аноним  
Дата: 26.06.06 12:14
Оценка:
Из 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.
SUNETA Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Windows.Forms.Timer
От: 4erniyPlasch Россия  
Дата: 26.06.06 12:53
Оценка:
Здравствуйте, k_savelev, Вы писали:

_>Может у вас эта ситуация:

_>http://blogs.msdn.com/bclteam/archive/2006/04/24/580064.aspx
_>Здесь правда другой тип таймера. Но смысла не меняет

Здесь все с точностью до наоборот. У меня события наоборот срабатывает чаще чем должно по идее.
Re[2]: Windows.Forms.Timer
От: _FRED_ Черногория
Дата: 26.06.06 12:59
Оценка:
Здравствуйте, 4erniyPlasch, Вы писали:

P>В догонку... в чем разница между таймерами находящимися в:

P>???

Comparing the Timer Classes in the .NET Framework Class Library
Help will always be given at Hogwarts to those who ask for it.
В чем разница между таймерами?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 25.01.07 06:02
Оценка: 2 (1)
#Имя: FAQ.dotnet.timers
Здравствуйте, 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>>
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.