C# Language
Таймеры
Поиск…
Синтаксис
-
myTimer.Interval- устанавливает, как часто вызывается событие «Tick» (в миллисекундах) -
myTimer.Enabled- логическое значение, которое устанавливает таймер для включения / отключения -
myTimer.Start()- запуск таймера. -
myTimer.Stop()- останавливает таймер.
замечания
Если вы используете Visual Studio, таймеры могут быть добавлены в виде элемента управления непосредственно в вашу форму из панели инструментов.
Многопоточные таймеры
System.Threading.Timer - Простой многопоточный таймер. Содержит два метода и один конструктор.
Пример: таймер вызывает метод DataWrite, который пишет «многопоточность, выполненный ...», по прошествии пяти секунд, а затем каждую секунду после этого, пока пользователь не нажмет Enter:
using System;
using System.Threading;
class Program
{
static void Main()
{
// First interval = 5000ms; subsequent intervals = 1000ms
Timer timer = new Timer (DataWrite, "multithread executed...", 5000, 1000);
Console.ReadLine();
timer.Dispose(); // This both stops the timer and cleans up.
}
static void DataWrite (object data)
{
// This runs on a pooled thread
Console.WriteLine (data); // Writes "multithread executed..."
}
}
Примечание. Будет опубликован отдельный раздел для утилизации многопоточных таймеров.
Change Этот метод можно вызвать, если вы хотите изменить интервал таймера.
Timeout.Infinite - если вы хотите запустить только один раз. Задайте это в последнем аргументе конструктора.
System.Timers - еще один класс таймера, предоставляемый .NET Framework. Он обертывает System.Threading.Timer .
Особенности:
-
IComponent-IComponentего размещение в лотке компонента Designer в Visual Studio - Свойство
Intervalвместо методаChange -
Elapsedeventвместоdelegateобратного вызова -
Enabledдля запуска и остановки таймера (default value = false) -
Start&Stopесли вы запутались в свойствеEnabled(выше точки) -
AutoReset- для указания повторяющегося события (default value = true) - Свойство
SynchronizingObjectс методамиInvokeиBeginInvokeдля безопасных методов вызова элементов WPF и элементов управления Windows Forms
Пример, представляющий все перечисленные выше функции:
using System;
using System.Timers; // Timers namespace rather than Threading
class SystemTimer
{
static void Main()
{
Timer timer = new Timer(); // Doesn't require any args
timer.Interval = 500;
timer.Elapsed += timer_Elapsed; // Uses an event instead of a delegate
timer.Start(); // Start the timer
Console.ReadLine();
timer.Stop(); // Stop the timer
Console.ReadLine();
timer.Start(); // Restart the timer
Console.ReadLine();
timer.Dispose(); // Permanently stop the timer
}
static void timer_Elapsed(object sender, EventArgs e)
{
Console.WriteLine ("Tick");
}
}
Multithreaded timers - используйте пул потоков, чтобы несколько потоков могли обслуживать множество таймеров. Это означает, что метод обратного вызова или Elapsed событие может запускаться по другому потоку каждый раз, когда он вызывается.
Elapsed - это событие всегда срабатывает вовремя, независимо от того, является ли предыдущим Elapsed закончило событие выполнения. Из-за этого обратные вызовы или обработчики событий должны быть потокобезопасными. Точность многопоточных таймеров зависит от ОС и обычно составляет 10-20 мс.
interop - когда вам нужна более высокая точность, используйте это и вызовите мультимедийный таймер Windows. Это имеет точность до 1 мс и определяется в winmm.dll .
timeBeginPeriod - сначала timeBeginPeriod это, чтобы сообщить ОС, что вам нужна высокая точность синхронизации
timeSetEvent - вызывать это через timeBeginPeriod для запуска мультимедийного таймера.
timeKillEvent - вызывать это, когда вы закончите, это останавливает таймер
timeEndPeriod - вызов этого, чтобы сообщить ОС, что вам больше не нужна высокая точность синхронизации.
Вы можете найти полные примеры в Интернете, которые используют мультимедийный таймер, dllimport поиск ключевых слов dllimport winmm.dll timesetevent .
Создание экземпляра таймера
Таймеры используются для выполнения задач через определенные промежутки времени (до X каждые Y секунд). Ниже приведен пример создания нового экземпляра таймера.
ПРИМЕЧАНИЕ . Это относится к таймерам, использующим WinForms. Если вы используете WPF, вы можете посмотреть в DispatcherTimer
using System.Windows.Forms; //Timers use the Windows.Forms namespace
public partial class Form1 : Form
{
Timer myTimer = new Timer(); //create an instance of Timer named myTimer
public Form1()
{
InitializeComponent();
}
}
Назначение обработчика события «Tick» для таймера
Все действия, выполняемые таймером, обрабатываются в событии «Tick».
public partial class Form1 : Form
{
Timer myTimer = new Timer();
public Form1()
{
InitializeComponent();
myTimer.Tick += myTimer_Tick; //assign the event handler named "myTimer_Tick"
}
private void myTimer_Tick(object sender, EventArgs e)
{
// Perform your actions here.
}
}
Пример: использование таймера для простого обратного отсчета.
public partial class Form1 : Form
{
Timer myTimer = new Timer();
int timeLeft = 10;
public Form1()
{
InitializeComponent();
//set properties for the Timer
myTimer.Interval = 1000;
myTimer.Enabled = true;
//Set the event handler for the timer, named "myTimer_Tick"
myTimer.Tick += myTimer_Tick;
//Start the timer as soon as the form is loaded
myTimer.Start();
//Show the time set in the "timeLeft" variable
lblCountDown.Text = timeLeft.ToString();
}
private void myTimer_Tick(object sender, EventArgs e)
{
//perform these actions at the interval set in the properties.
lblCountDown.Text = timeLeft.ToString();
timeLeft -= 1;
if (timeLeft < 0)
{
myTimer.Stop();
}
}
}
Результаты в ...
И так далее...

