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

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

  • автор:

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

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

Элемент управления таймером не имеет визуального представления и работает как компонент в фоновом режиме. При попытке перетаскивания Timer на форму мы обнаружим его в нижнем конце экрана.

Мы можем управлять программами с помощью таймера в миллисекундах, секундах, минутах и даже в часах. Элемент управления таймером позволяет нам установить свойство интервала в миллисекундах. То есть одна секунда равна 1000 миллисекундам. Например, если мы хотим установить интервал в 1 минуту, мы устанавливаем значение свойства Interval равным 60000, что означает 60×1000.

По умолчанию свойство управления таймером имеет значение False. Поэтому перед запуском программы мы должны установить свойство Enabled равным True, тогда только управление таймером начнет свою функцию. Для чего правой кнопкой мыши щелкаем на элементе и во вкладке Свойства выбираем нужные пункты.

Изображение

В следующей программе мы отобразим текущее время в элементе lable. Для начала создадим новое проект Windows Forms. Затем перетащим на него элемент Timer и lable. Двойной щелчок по элементу таймера создаст метод обработчик, внутри которого мы и будем присваивать изменяющееся значения таймера метке на lable.

using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
public partial class Form1 : Form
public Form1()
InitializeComponent();
>
private void timer1_Tick(object sender, EventArgs e)
label1.Text = DateTime.Now.ToString();
>
>
>

Изображение

Таким образом передали метке lable изменяющееся значение элемента DateTime.

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

Реализует таймер, который вызывает событие через определенные пользователем интервалы времени. Данный таймер оптимизирован для приложений формы Windows Forms и должен использоваться в окне.

Примеры

В следующем примере реализуется простой интервал таймера, который устанавливает сигнал каждые пять секунд. При возникновении будильника MessageBox выводит количество попыток запуска сигнала и предлагает пользователю указать, следует ли продолжать выполнение таймера.

Комментарии

При использовании этого таймера используйте Tick событие для выполнения операции опроса или для отображения экрана-заставки на указанный период времени. Если Enabled свойство имеет значение true , а Interval свойство больше нуля, то Tick событие вызывается с интервалами в зависимости от Interval значения свойства.

Этот класс предоставляет методы для задания интервала, а также для запуска и завершения таймера.

Компонент таймера Windows Forms является однопотоковым и ограничивается точностью до 55 миллисекунд. Если вам требуется многопоточный таймер с большей точностью, используйте Timer класс в System.Timers пространстве имен.

Конструкторы

Инициализирует новый экземпляр класса Timer.

Инициализирует новый экземпляр класса Timer вместе с указанным контейнером.

Свойства

Возвращает значение, показывающее, может ли компонент вызывать событие.

Возвращает объект IContainer, который содержит коллекцию Component.

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.

Возвращает или задает признак активности таймера.

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.

Возвращает или задает время в миллисекундах до вызова события Tick относительно момента, когда событие Tick произошло последний раз.

Получает или задает ISite объекта Component.

Возвращает или задает произвольную строку, представляющую некоторый тип состояния пользователя.

Методы

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

Освобождает все ресурсы, занятые модулем Component.

Освобождает все используемые таймером ресурсы, кроме памяти.

Определяет, равен ли указанный объект текущему объекту.

Служит хэш-функцией по умолчанию.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.

Возвращает объект Type для текущего экземпляра.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

Возвращает строку, представляющую объект Timer.

События

Возникает при удалении компонента путем вызова метода Dispose().

Происходит по истечении заданного интервала таймера при условии, что таймер включен.

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

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

Шаг 1

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

Шаг 2

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

Шаг 3

Шаг 4

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

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

Шаг 5

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

Шаг 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 раз пропишется текущая дата и время. Это значит, что мы все сделали правильно.

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

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

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

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

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

Резюме

Закрепить приведенный материал можно на базе таких видео:

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .

Читайте также:

  • Оптимизация chrome mac os
  • Требуются дополнительные типы mime ubuntu
  • Supervisor linux что это
  • Как загрузить файлы на vds сервер linux
  • Аналог джокера для windows

Точный таймер C# Timer (System.Windows.Forms)

Есть программа, которая в заданное время, по таймеру, копирует файлы. Значение времени копирования, указывается в DateTimePicker (отображает только время). Значение времени из DateTimePicker записывается в переменную ScheduledTime, затем она сравнивается с DateTime.Now и если значение ScheduledTime меньше, то добавляется 1 день. Функция GetSetScheduledTime():

if (DateTime.Now > ScheduledTime) < while (DateTime.Now >= ScheduledTime) < ScheduledTime = ScheduledTime.AddDays(1); DateTimePickerTimer.Value = DateTimePickerTimer.Value.AddDays(1); >> 

Цикл while используется для чтения даты из конфиг файла, где дата может быть старой. После уточнения ScheduledTime получаем интервал TickTime для таймера:

 TickTime = (int)(GetSetScheduledTime() - DateTime.Now).TotalMilliseconds; if (TickTime >= 0) < TimerPl.Interval = TickTime; //Start Main Timer TimerPl.Start(); >

После того, как таймер срабатывает, в функции TimerTick таймер останавливается, запускается функция копирования, отсылаются отчеты и записывается лог и снова запускается функция таймера, проверяется время, получается новый интервал и снова ждем следующего срабатывания. Проблема в том, что время плавает. В первый день, на 2 разных компьютерах, таймер сработал точно, на второй день, сработал раньше на 1 секунду и на 2 секунды. Будет ли возрастать это время пока не ясно. Я понимаю что таймер не является точным инструментом и тики могут запаздывать или идти быстрее. Но если у нас есть значение из DateTimePicker, где время не меняется, а только увеличивается на 1 день и потом это значение присваивается ScheduledTime и если я каждый раз получаю новый интервал который равен — время планирования — текущее время, разве должна или может ошибка накапливаться? Как этого избежать? Я не против люфта до 5 секунд, но если это значение будет постоянно возрастать, как корректировать время? UPD: Короче добиться точного времени не удалось, но поскольку задача так и не стояла, то имею люфт в секунду. Учитываю это при формировании следующей даты, обнуляю все значения где нужно и все работает. Таймеры шарпа не лучшее решение, там где нужно точное время. По возможности старайтесь их избегать.

Таймер на С++

Привет всем! Я много думал, искал, писал, но никак не получалось создать таймер в label1 по нажатию кнопки. Для Windows Form. Кто знает, напишите, буду рад!

Отслеживать
51.4k 87 87 золотых знаков 267 267 серебряных знаков 508 508 бронзовых знаков
задан 23 мар 2012 в 11:03
278 4 4 золотых знака 10 10 серебряных знаков 28 28 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Самый простой алгоритм

Пишем функцию, в которой

  1. Запускаем цикл со счетчиком.
  2. Переводим значение счетчика в часы-минуты-секунды (типа, count==100 -> h == 0, min ==1, sec == 40).
  3. Устанавливаем соответственное значение поля Text у Label.
  4. Засыпаем на 1 сек.
  5. Возвращаемся в п. 2.

И самое главное — все это запускаем в отдельном потоке. Для прерывания создаем некую булевую переменную, которую цикл счетчика может на определенном этапе проверять, и если она == true, то цикл продолжается, если false, то прерывается.

Timer Класс

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

Реализует таймер, который вызывает событие через определенные пользователем интервалы времени. Данный таймер оптимизирован для приложений формы Windows Forms и должен использоваться в окне.

public ref class Timer : System::ComponentModel::Component
public class Timer : System.ComponentModel.Component
type Timer = class inherit Component
Public Class Timer Inherits Component

Наследование

Примеры

В следующем примере реализуется простой таймер интервала, который устанавливает сигнал тревоги каждые пять секунд. При возникновении будильника MessageBox отображается количество запусков оповещения и выводится запрос пользователя о том, следует ли продолжать работу таймера.

public ref class Class1 < private: static System::Windows::Forms::Timer^ myTimer = gcnew System::Windows::Forms::Timer; static int alarmCounter = 1; static bool exitFlag = false; // This is the method to run when the timer is raised. static void TimerEventProcessor( Object^ /*myObject*/, EventArgs^ /*myEventArgs*/ ) < myTimer->Stop(); // Displays a message box asking whether to continue running the timer. if ( MessageBox::Show( "Continue running?", String::Format( "Count is: ", alarmCounter ), MessageBoxButtons::YesNo ) == DialogResult::Yes ) < // Restarts the timer and increments the counter. alarmCounter += 1; myTimer->Enabled = true; > else < // Stops the timer. exitFlag = true; >> public: static void Main() < /* Adds the event and the event handler for the method that will process the timer event to the timer. */ myTimer->Tick += gcnew EventHandler( TimerEventProcessor ); // Sets the timer interval to 5 seconds. myTimer->Interval = 5000; myTimer->Start(); // Runs the timer, and raises the event. while ( exitFlag == false ) < // Processes all the events in the queue. Application::DoEvents(); >> >; int main()
public class Class1 < static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); static int alarmCounter = 1; static bool exitFlag = false; // This is the method to run when the timer is raised. private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs) < myTimer.Stop(); // Displays a message box asking whether to continue running the timer. if(MessageBox.Show("Continue running?", "Count is: " + alarmCounter, MessageBoxButtons.YesNo) == DialogResult.Yes) < // Restarts the timer and increments the counter. alarmCounter +=1; myTimer.Enabled = true; >else < // Stops the timer. exitFlag = true; >> public static int Main() < /* Adds the event and the event handler for the method that will process the timer event to the timer. */ myTimer.Tick += new EventHandler(TimerEventProcessor); // Sets the timer interval to 5 seconds. myTimer.Interval = 5000; myTimer.Start(); // Runs the timer, and raises the event. while(exitFlag == false) < // Processes all the events in the queue. Application.DoEvents(); >return 0; > > 
Public Class Class1 Private Shared WithEvents myTimer As New System.Windows.Forms.Timer() Private Shared alarmCounter As Integer = 1 Private Shared exitFlag As Boolean = False ' This is the method to run when the timer is raised. Private Shared Sub TimerEventProcessor(myObject As Object, _ ByVal myEventArgs As EventArgs) _ Handles myTimer.Tick myTimer.Stop() ' Displays a message box asking whether to continue running the timer. If MessageBox.Show("Continue running?", "Count is: " & alarmCounter, _ MessageBoxButtons.YesNo) = DialogResult.Yes Then ' Restarts the timer and increments the counter. alarmCounter += 1 myTimer.Enabled = True Else ' Stops the timer. exitFlag = True End If End Sub Public Shared Sub Main() ' Adds the event and the event handler for the method that will ' process the timer event to the timer. ' Sets the timer interval to 5 seconds. myTimer.Interval = 5000 myTimer.Start() ' Runs the timer, and raises the event. While exitFlag = False ' Processes all the events in the queue. Application.DoEvents() End While End Sub End Class 

Комментарии

Используется Timer для создания события с определяемыми пользователем интервалами. Этот таймер Windows предназначен для однопоточной среды, в которой потоки пользовательского интерфейса используются для выполнения обработки. Для этого требуется, чтобы в пользовательском коде был доступен насос сообщений пользовательского интерфейса и всегда работал из того же потока или маршалировать вызов в другой поток.

При использовании этого таймера используйте Tick событие для выполнения операции опроса или отображения экрана-заставки в течение указанного периода времени. Всякий раз, когда свойству Enabled присвоено значение true , а Interval свойство больше нуля, Tick событие вызывается с интервалами в зависимости от Interval значения свойства.

Этот класс предоставляет методы для задания интервала, а также для запуска и остановки таймера.

Компонент таймера Windows Forms является однопоточным и ограничен точностью 55 миллисекунд. Если требуется многопоточный таймер с большей точностью, используйте Timer класс в System.Timers пространстве имен.

Конструкторы

Инициализирует новый экземпляр класса Timer.

Инициализирует новый экземпляр класса Timer вместе с указанным контейнером.

Свойства

Возвращает значение, показывающее, может ли компонент вызывать событие.

Возвращает объект IContainer, который содержит коллекцию Component.

Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время.

Возвращает или задает признак активности таймера.

Возвращает список обработчиков событий, которые прикреплены к этому объекту Component.

Возвращает или задает время в миллисекундах до вызова события Tick относительно момента, когда событие Tick произошло последний раз.

Получает или задает ISite объекта Component.

Возвращает или задает произвольную строку, представляющую некоторый тип состояния пользователя.

Методы

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

Освобождает все ресурсы, занятые модулем Component.

Освобождает все используемые таймером ресурсы, кроме памяти.

Определяет, равен ли указанный объект текущему объекту.

Служит хэш-функцией по умолчанию.

Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container.

Возвращает объект Type для текущего экземпляра.

Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

Возвращает строку, представляющую объект Timer.

События

Возникает при удалении компонента путем вызова метода Dispose().

Происходит по истечении заданного интервала таймера при условии, что таймер включен.

Применяется к

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)

  • Светлая
  • Темная
  • Высокая контрастность
  • Предыдущие версии
  • Блог
  • Участие в доработке
  • Конфиденциальность
  • Условия использования
  • Товарные знаки
  • © Microsoft 2024

Дополнительные ресурсы

Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)

  • Светлая
  • Темная
  • Высокая контрастность
  • Предыдущие версии
  • Блог
  • Участие в доработке
  • Конфиденциальность
  • Условия использования
  • Товарные знаки
  • © Microsoft 2024

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

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