Поиск…


Синтаксис

  • 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
  • Elapsed event вместо 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();
            }
        }
    }

Результаты в ...

введите описание изображения здесь введите описание изображения здесь

И так далее...



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow