Как сделать таймер в c windows forms
Перейти к содержимому

Как сделать таймер в c windows forms

  • автор:

 

Класс Timer в C#: все, что нужно знать новичку

Таймер — программный механизм, позволяющий через определенное время выполнять нужный нам участок кода, делая это заданное количество раз. Например, нам нужно запускать резервное копирование папки каждые 10 минут или делать запись в файл журнала каждую секунду. В языке программирования C# есть все необходимые средства, чтобы реализовать такую логику. Не будем ходить вокруг да около, а сразу рассмотрим принцип работы такого механизма на реальном примере.

Содержание:

Визуальный режим использования таймера в С# (timer wpf c#)

Присутствующий в Windows Forms управляющий элемент «Таймер» ( c# windows forms timer ) можно перетащить в форму и задать его свойства. Давайте создадим приложение Windows, использующее таймер для записи текста в текстовый файл каждые 5 секунд. В нашем приложении Windows Forms есть две кнопки: «Пуск» и «Стоп». Программа будет записывать строку в текстовый файл каждую секунду после первоначального нажатия кнопки «Пуск». Приложение прекратит временные циклы записи в текстовый файл при нажатии кнопки «Стоп».

Шаг 1

Откроем Visual Studio и создадим приложение Windows Forms.

Шаг 2

Добавим в форму два элемента управления Button и назовем их Start и Stop , хотя имена вы можете написать любые, по своему усмотрению. Окончательная форма выглядит следующим образом:

C# таймер

Шаг 3

Теперь давайте добавим в нашу программу элемент управления Timer . Перетащим его из Visual Studio Toolbox в форму. С помощью такой нехитрой манипуляции в нашей форме появится элемент – timer1 .

Шаг 4

Теперь нам необходимо установить свойства нашего таймера. Для этого щелкнем правой кнопкой мыши на элементе управления « Timer » и откроем окно «Свойства». Здесь для вкладки Interval необходимо установить значение 1000, которое определяется в миллисекундах.

1 секунда = 1000 миллисекунд.

C# таймер

Шаг 5

Теперь нужно нажать кнопку Events и добавить обработчик событий Timer , дважды щелкнув по свойству Tick . Событие таймера здесь — timer1_Tick (как показано на изображении ниже).

C# таймер

Шаг 6

Теперь добавим классы FileStream и StreamWriter в начало нашей программы. Они используются для создания нового текстового файла и реализации записи данных в него. Все классы определены в библиотеке базовых классов System.IO , поэтому обязательно импортируйте System.IO в начале программы.

Мы видим из предыдущего участка кода, что класс FileStream создает файл mcb.txt на диске C , а StreamWriter определен для записи в него данных. Теперь напишем алгоритм реализации записи нескольких строк в наш файл:

Далее настроим два обработчика регулирующих нажатие кнопок Start и Stop . В примере ниже, для кнопки «Пуск» устанавливаем значение свойства таймера Enabled = true . Теперь при нажатии на нее будет запускаться таймер, регулирующий выполнение события.

Ту же процедуру проделываем и с кнопкой STOP , только в этом случае свойству Enabled устанавливаем значение false для прекращения выполнения нашего события.

Остался последний шаг — создать событие timer1_Tick , записывающее текущую дату в текстовый файл:

Шаг 7

Скомпилируем и запустим приложение. Затем нажмем кнопку «Пуск», чтобы начать запись в текстовый файл. Подождем примерно минуту, а затем нажмем кнопку «Стоп», чтобы остановить его работу. В выходном текстовом файле mcb.txt после всех манипуляций около 60 раз пропишется текущая дата и время. Это значит, что мы все сделали правильно.

Пример использования в C# класса Timer во время выполнения программы

Мы только что разобрали, как использовать таймер в начале разработки приложения с помощью визуального конструктора Visual Studio. Но иногда вам может потребоваться программно использовать таймер во время выполнения этого приложения.

Класс Timer в C# представляет функции отложенного запуска событий во время выполнения программы.

Например: создадим такой таймер, установим ему необходимые свойства, а также добавим обработчик событий, интервал сделаем равным 2 секундам:

Допустим, мы хотим отобразить текст в элементе управления ListBox . Следующий код добавляет текст и обновляет ListBox каждые 2 секунды:

Класс Timer также можно использовать, если вы хотите вызывать событие через заданный промежуток времени:

Событие в предыдущем примере будет запускаться каждые 5 секунд.

Резюме

Мы рассмотрели основные моменты работы с функцией таймера в C#, а также разобрались, как создать приложение Windows с элементами управления Timer , чтобы использовать его для выполнения необходимого вам функционала. Мы разобрали как вариант визуального программирования через управляющие элементы, так и случай программного вызова таймера в произвольном участке кода.

Как сделать таймер в c windows forms

TrackBar представляет собой элемент, который с помощью перемещения ползунка позволяет вводить числовые значения.

Элемент TrackBar в Windows Forms

Некоторые важные свойства TrackBar:

Orientation : задает ориентацию ползунка — расположение по горизонтали или по вертикали

TickStyle : задает расположение делений на ползунке

TickFrequency : задает частоту делений на ползунке

Minimum : минимальное возможное значение на ползунке (по умолчанию 0)

Maximum : максимальное возможное значение на ползунке (по умолчанию 10)

Value : текущее значение ползунка. Должно находиться между Minimum и Maximum

Свойство TickStyle может принимать ряд значений:

None : деления отсутствуют

Both : деления расположены по обеим сторонам ползунка

BottomRight : у вертикального ползунка деления находятся справа, а у горизонтального — снизу

TopLeft : у вертикального ползунка деления находятся слева, а у горизонтального — сверху (применяется по умолчанию)

К наиболее важным событиям элемента следует отнести событие Scroll , которое позволяет обработать перемещение ползунка от одного деления к другому. Что может быть полезно, если нам надо, например, устанавливать соответствующую громкость звука в зависимости от значения ползунка, либо какике-нибудь другие настройки:

Перемещение ползунка в Windows Forms

Timer

Timer является компонентом для запуска действий, повторяющихся через определенный промежуток времени. Хотя он не является визуальным элементом, но его аткже можно перетащить с Панели Инструментов на форму:

Timer в Windows Forms

Наиболее важные свойства и методы таймера:

Свойство Enabled : при значении true указывает, что таймер будет запускаться вместе с запуском формы

Свойство Interval : указывает интервал в миллисекундах, через который будет срабатывать обработчик события Tick, которое есть у таймера

Метод Start() : запускает таймер

Метод Stop() : останавливает таймер

Для примера определим простую форму, на которую добавим кнопку и таймер. В файле кода формы определим следующий код:

Здесь в конструкторе формы устанавливаются начальные значения для таймера, кнопки и формы.

Через каждый интервал таймера будет срабатывать обработчик timer1_Tick , в котором изменяется положение кнопки по горизонтали с помощью свойства button1.Left . А с помощью дополнительной переменной koef можно управлять направлением движения.

Кроме того, с помощью обраотчика нажатия кнопки button1_Click можно либо остановить таймер (и вместе с ним движение кнопки), либо опять его запустить.

Индикатор прогресса ProgressBar

Элемент ProgressBar служит для того, чтобы дать пользователю информацию о ходе выполнения какой-либо задачи.

ProgressBar в Windows Forms

Наиболее важые свойства ProgressBar:

Minimum : минимальное возможное значение

Maximum : максимальное возможное значение

Value : текущее значение элемента

Step : шаг, на который изменится значение Value при вызове метода PerformStep

Для имитации работы прогрессбара поместим на форму таймер и в коде формы определим следующий код:

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Исходный код: таймер на C# в Windows Forms

Разбираем создание таймера на языке программирования C# в приложении Windows Forms. Полный исходный код с подробными комментариями можно будет скачать внизу страницы.

 

Для начала в Windows Forms создаём внешнюю оболочку программы. У нас она выглядит вот так:

таймер на C# в Windows Forms - vscode.ru

Здесь у нас 8 Label’ов, 3 TextBox’a, 3 Buttom’a и сам Timer.

Примечание: при переносе элемента Timer в форму, на неё ничего не появляется. Лишь в нижней части окна программы под формой появляется значок Значок таймера, не пугайтесь.

Щёлкнем на значок таймера Значок таймера на C# и в окне «Свойства» в группе «Поведение» устанавливаем значение параметра Interval равным 1000. Данный параметр определяет длину тика таймера в миллисекундах, указав 1000, мы сделали один тик равным одной секунде.

После оформления и настройки приступаем к коду. Вводим целочисленные переменные h — часы, m- минуты, s — секунды.

Затем дважды щёлкаем мышью на кнопке «Старт» и переходим на участок кода, отвечающий за клик на эту кнопку.

C# Timer: Everything you need to know

A thumbnail showing code. Everything you need to know about C# Timer class.

Timers are very useful in C# for UI programming, games, and applications have logic based on time intervals.

Timers that C# has available through .NET make it easy to time intervals and also to perform specific tasks at specific intervals.

The C# Timer class is a .NET class that helps you create an event that will happen at a set interval. The interface makes it easy to start and stop a timer or enable and disable it.

Timer Usage

The key terms when using the timer class are:

  • Interval: Time interval between two successive invocations of Elapsed function.
  • Callback: The timer invokes this method at the end.
  • AutoReset: Boolean that determines whether the timer will raise the Tick event each time the specified interval has elapsed.

To use a timer in C#, follow these steps:

Setup the timer with your desired interval in milliseconds.

Define the Elapsed event handler. The timer will call this handler every time the interval milliseconds have elapsed.

Setup the timer to call your event handler:

Call the Start() method to start the timer.

Once done with the timer, call the Dispose() method to free up the resources used by the Timer.

Putting it all together:

Plus equal event

The += (plus equal) syntax in C# is a shortcut for defining an event handler. It tells the timer to subscribe to the event handler.

We can also use -= (minus equal) to unsubscribe if needed.

Interval limitation

The C# Timer depends on the system clock.

The resolution of the system clock is how often the Elapsed event will fire. If you set the Interval property to be less than resolving the system clock, then it won't fire at the desired interval.

For most use cases that won't be a problem. But if you are looking for high-resolution timer, then consider using the Stopwatch class.

Disposing

Timer class implements System.IDisposable interface to release the system resources allocated by it when disposed.

Best practices when working in C# say that you should clean up your resources if the class implements IDisposable interface.

There are two ways to dispose the Timer:

  • Dispose the timer by calling the Dispose() method inside a try/catch block to avoid exception.
  • Use the using directive to automatically call the Dispose method when a particular scope is clean up. This will avoid the extra try/catch block and code lines to clean up properly.

Microsoft documentation showing a note to dispose IDisposable objects.

Microsoft says to dispose IDisposable objects.

Async timer

The System.Timers.Timer class support async event handler to fire the event at the desired time interval. To define an async event handler, use the async modifier before your signature for Elapsed event handler.

Keep in mind that the async callback must return a Task. If the async method runs longer than the interval, you might have some unexpected results.

Different timers in .NET

In .NET, there are 4 different timers depending on the way you want to use them:

  • System.Windows.Forms.Timer
  • The System.Web.UI.Timer
  • System.Timers.Timer
  • System.Threading.Timer

System.Windows.Forms.Timer

The System.Windows.Forms.Timer class is specifically designed for rich client user interfaces.

Programmers can drag it into a form as a nonvisual control and regulate the behavior from within the Properties window. It will always safely fire an event from a thread that can interact with the user interface.

System.Web.UI.Timer

The System.Web.UI.Timer can perform Web page post backs at a defined interval, either asynchronously or synchronously. It's part of the ASP.NET framework, so we can use it only in ASP.NET Web applications.

This timer is useful for creating a real-time display of information on an ASP.NET application.

System.Threading.Timer

The System.Threading.Timer provides the ability to schedule a single callback on a background thread, either asynchronously or synchronously.

System.Threading.Timer is thread-safe.

System.Timers.Timer

System.Timers.Timer is the best way to implement a timer in C#.

System.Timers.Timer is a wrapper for System.Threading.Timer, abstracting and layering on functionality.

You cannot use System.Threading.Timer as a component within a component container, something that implements System.ComponentModel.IContainer, because it does not derive from System.ComponentModel.Component.

System.Timers.Timer extends the capabilities of the System.Timers.Timer to include features necessary for component container applications.

System.Timers.Timer and System.Threading.Timer are both designed for use in server-type processes, but System.Timers.Timer includes a synchronization object to allow it to interact with the user interface, which is helpful for applications that need to keep track of user input or updates.

When to use which timer?

Follow these guidelines to choose which one to use:

  • System.Windows.Forms.Timer — For Windows Forms application, runs the delegate on a form's UI thread.
  • System.Web.UI.Timer — For ASP.NET component. It allows you to perform asynchronous or synchronous web page post backs at regular intervals.
  • System.Threading.Timer — great for background tasks on a thread pool.
  • System.Timers.Timer — wraps the System.Threading.Timer with the simpler API. We use this one most of the time.

C# Timer Accuracy

The C# Timer is not accurate. The timer, on average, takes 9.07% longer than it is supposed to, according to research from Lawrence Technological University.

To get accurate time, we need to use the .NET StopWatch class.

System.Diagnostics.Stopwatch

The stopwatch class is used to time code execution. It can be started, stopped/paused, and reset.

The main difference between C# Stopwatch and C# Timers is that while the Timer triggers an event when a certain interval has elapsed, Stopwatch calculates how much time has passed since it started. Moreover, the Stopwatch is much more accurate and can measure time to a greater level of precision.

If you want a high-resolution timer, consider using the Stopwatch instead of the Timer.

Stopwatch implementation source code from .NET framework.

Stopwatch implementation source code.

EventHandler vs ElapsedEventHandler

The main difference between EventHandler and ElapsedEventHandler is that EventHandler is more generic and ElapsedEventHandler works with a delegate that has a specific signature.

ElapsedEventHandler is a delegate that passes ElapsedEventArgs which extends EventHandler's arguments by adding FileTime and SignalTime . The added logic makes the ElapsedEventHandler delegate compatible with ElapsedEventArgs.

ElapsedEventArgs implementation source code from .NET framework.

ElapsedEventArgs implementation source code.

What is an event in C#?

An event in C# is a way for a class to let clients know when something interesting happens with an object. We declare events using delegates.

Terms subscribe and unsubscribe are sometimes used to show that a class is interested in a particular event and wants to know when it occurs.

We often don't need event arguments, so we can implement that as an optional argument in the event handler.

How to name events in C#?

The naming convention suggest naming events in the past tense. For example, OrderPlaced, OrderShipped, etc.

The convention also suggest naming event handler as a combination of event name and EventHandler suffix. For the events above, the event handler would be named OrderPlacedEventHandler , OrderShippedEventHandler .

Conclusion

Timers are a great way to handle time-based operations in C#. They can be used for everything from UI programming to game logic and more.

The timer class is easy to use, and makes it simple to set up an event that will happen at a specific interval.

In order to use a timer in C#, you must first setup the timer with your desired interval and then define the Elapsed event handler. Once the timer is started, it will call the event handler every time the specified interval has elapsed.

If you need a high-resolution timer, consider using the Stopwatch class. When you're done using the timer, be sure to dispose of it properly by calling the Dispose() method.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *