Timer. Start Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Начинает вызывать событие Elapsed, задавая для свойства Enabled значение true .
public: void Start();
public void Start ();
member this.Start : unit -> unit
Public Sub Start ()
Исключения
Создается Timer с интервалом, равным или превышающим Значение Int32.MaxValue + 1, или устанавливается интервал меньше нуля.
Комментарии
Если Start вызывается и AutoReset имеет значение false , TimerElapsed вызывает событие только один раз, когда интервал истекает в первый раз. Если Start вызывается и AutoReset имеет значение true , Timer вызывает Elapsed событие при первом истечении интервала и продолжает вызывать событие в указанном интервале.
Вы также можете запустить время, задав для параметра значение Enabled true .
Если AutoReset имеет значение false , Start метод должен вызываться для повторного запуска счетчика.
Вызов метода при Start включении таймера не оказывает никакого влияния.
Как перезапустить таймер
А не мог бы кто-нибудь подсказать, что произойдет с таймером, если выполнить Timer.Start(), когда таймер уже запущен (ожидаю перезапуск таймера, но проверить пока негде).
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как перезапустить explorer через команду?
Есть ли способ обновить/перезапустить explorer.exe безобидным способом, чтобы открытые приложения.
Как перезапустить таймер T0 на 2313?
Подскажите пож, как произвольно перезапускать таймер T0 на tiny2313? просто PSR10_bit:= 1; не.
Перезапустить таймер
Доброе время суток. Подскажите пожалуйста, как перезапустить таймер? Есть label18 в котором идет.
Как перезапустить форму?
Всем привет.Вопрос следующий: у меня есть форма и мне надо ,чтоб пользователь по нажатию на кнопку.
Таймеры и напоминания
Среда Orleans выполнения предоставляет два механизма, называемые таймерами и напоминаниями, которые позволяют разработчику указать периодическое поведение для зерен.
таймеры
Таймеры используются для создания периодического поведения зерна, которое не требуется для охвата нескольких активаций (экземпляров зерна). Таймер идентичен стандартному классу .NET System.Threading.Timer . Кроме того, таймеры подвергаются гарантиям однопоточного выполнения в рамках активации зерна, с которой они работают, и их выполнение переплетаются с другими запросами, как будто обратный вызов таймера был методом зерна, помеченным с AlwaysInterleaveAttribute.
Каждая активация может иметь нулевое или больше таймеров, связанных с ним. Среда выполнения выполняет каждую подпрограмму таймера в контексте среды выполнения активации, с которым она связана.
Использование таймера
Чтобы запустить таймер, используйте Grain.RegisterTimer метод, который возвращает ссылку IDisposable :
public IDisposable RegisterTimer( Func asyncCallback, // function invoked when the timer ticks object state, // object to pass to asyncCallback TimeSpan dueTime, // time to wait before the first timer tick TimeSpan period) // the period of the timer
Чтобы отменить таймер, удалите его.
Таймер перестает активироваться, если зерно деактивировано или когда происходит сбой, и его сбой в сило.
Важные сведения:
- Если включена коллекция активаций, выполнение обратного вызова таймера не изменяет состояние активации с простоя на использование. Это означает, что таймер не может использоваться для отсрочки деактивации активации в противном случае бездействия.
- Grain.RegisterTimer Период, переданный, — это время, которое проходит с момента, когда задача, возвращаемая asyncCallback задачей, разрешается до момента, когда должно произойти следующее вызов asyncCallback . Это не только делает невозможными последовательные вызовы asyncCallback к перекрытию, но и делает его таким образом, чтобы продолжительность asyncCallback времени была завершена, влияет на частоту asyncCallback вызова. Это важное отклонение от семантики System.Threading.Timer.
- Каждое вызов asyncCallback доставляется в активацию в отдельном повороте и никогда не выполняется параллельно с другими включениями той же активации. asyncCallback Однако вызовы не доставляются как сообщения и поэтому не подвергаются семантике взаимодействия сообщений. Это означает, что вызовы asyncCallback поведения, как если бы зерно повторно записывается и выполняется параллельно с другими запросами на зерно. Чтобы использовать семантику планирования запросов зерна, можно вызвать метод зерна для выполнения работы, которую вы выполнили бы в asyncCallback рамках. Другой альтернативой является использование AsyncLock или a SemaphoreSlim. Более подробное объяснение доступно в Orleans проблеме GitHub #2574.
Напоминания
Напоминания похожи на таймеры с несколькими важными различиями:
- Напоминания являются постоянными и продолжают запускаться практически во всех ситуациях (включая частичные или полные перезапуски кластера), если только явно не отменено.
- Напоминания «определения» записываются в хранилище. Однако каждое конкретное вхождение, с определенным временем, не является. Это имеет побочный эффект, что если кластер отключен во время определенного галочки напоминания, он будет пропущен, и произойдет только следующий галок напоминания.
- Напоминания связаны с зерном, а не какой-либо конкретной активацией.
- Если у зерна нет активации, связанной с ней при возникновении напоминаний, создается зерно. Если активация становится бездействуемой и деактивирована, напоминание, связанное с тем же зерном, повторно активирует зерно, когда он будет тикать дальше.
- Доставка напоминаний происходит через сообщение и подвергается той же семантике переключения, что и все остальные методы зерна.
- Напоминания не следует использовать для таймеров высокой частоты. Их период должен измеряться в минутах, часах или днях.
Конфигурация
Напоминания, сохраняемые, полагаются на хранилище для работы. Необходимо указать, какое хранилище следует использовать перед функциями подсистемы напоминания. Это делается путем настройки одного из поставщиков напоминаний с помощью UseReminderService методов расширения, где X имя поставщика, например UseAzureTableReminderService.
Конфигурация таблицы Azure:
// TODO replace with your connection string const string connectionString = "YOUR_CONNECTION_STRING_HERE"; var silo = new HostBuilder() .UseOrleans(builder => < builder.UseAzureTableReminderService(connectionString) >) .Build();
const string connectionString = "YOUR_CONNECTION_STRING_HERE"; const string invariant = "YOUR_INVARIANT"; var silo = new HostBuilder() .UseOrleans(builder => < builder.UseAdoNetReminderService(options =>< options.ConnectionString = connectionString; // Redacted options.Invariant = invariant; >); >) .Build();
Если вы просто хотите, чтобы заполнитель напоминаний работал без необходимости настраивать учетную запись Azure или базу данных SQL, это дает реализацию системы напоминаний только для разработки:
var silo = new HostBuilder() .UseOrleans(builder => < builder.UseInMemoryReminderService(); >) .Build();
Использование напоминаний
Зерно, использующее напоминания, должно реализовать IRemindable.ReceiveReminder метод.
Task IRemindable.ReceiveReminder(string reminderName, TickStatus status)
Чтобы запустить напоминание, используйте Grain.RegisterOrUpdateReminder метод, который возвращает IGrainReminder объект:
protected Task RegisterOrUpdateReminder( string reminderName, TimeSpan dueTime, TimeSpan period)
- reminderName : это строка, которая должна однозначно идентифицировать напоминание в области контекстного зерна.
- dueTime : указывает количество времени ожидания перед выдачой галочки первого таймера.
- period : указывает период таймера.
Так как напоминания сохраняют время существования любой отдельной активации, они должны быть явно отменены (в отличие от удаления). Вы отменяете напоминание путем вызова Grain.UnregisterReminder:
protected Task UnregisterReminder(IGrainReminder reminder)
Объект reminder дескриптора, возвращаемый Grain.RegisterOrUpdateReminder.
Экземпляры IGrainReminder не гарантируют допустимость за пределами срока действия активации. Если вы хотите определить напоминание таким образом, чтобы оно сохранялось, используйте строку, содержащую имя напоминания.
Если у вас есть только имя напоминания и требуется соответствующий экземпляр IGrainReminder , вызовите Grain.GetReminder метод:
protected Task GetReminder(string reminderName)
Решите, какой из них следует использовать
Рекомендуется использовать таймеры в следующих случаях:
- Если это не имеет значения (или желательно), таймер перестает функционировать при деактивации активации или сбоях.
- Разрешение таймера небольшое (например, достаточно выражено в секундах или минутах).
- Обратный вызов таймера можно запустить или Grain.OnActivateAsync() при вызове метода зерна.
Рекомендуется использовать напоминания в следующих обстоятельствах:
- Когда периодическое поведение должно выжить в активации и любых сбоях.
- Выполнение редких задач (например, достаточно выражено в минутах, часах или днях).
Объединение таймеров и напоминаний
Вы можете использовать сочетание напоминаний и таймеров для достижения цели. Например, если вам нужен таймер с небольшим разрешением, которое должно выжить во время активации, можно использовать напоминание, которое выполняется каждые пять минут, цель которого заключается в пробуждении зерна, которое перезапускает локальный таймер, который, возможно, был потерян из-за деактивации.
Регистрация зерна POCO
Чтобы зарегистрировать таймер или напоминание с помощью зерна POCO, вы реализуете IGrainBase интерфейс и внедряете или IReminderRegistry в ITimerRegistry конструктор зерна.
using Orleans.Runtime; using Orleans.Timers; namespace Timers; public sealed class PingGrain : IGrainBase, IPingGrain, IDisposable < private const string ReminderName = "ExampleReminder"; private readonly IReminderRegistry _reminderRegistry; private IGrainReminder? _reminder; public IGrainContext GrainContext < get; >public PingGrain( ITimerRegistry timerRegistry, IReminderRegistry reminderRegistry, IGrainContext grainContext) < // Register timer timerRegistry.RegisterTimer( grainContext, asyncCallback: static async state =>< // Omitted for brevity. // Use state await Task.CompletedTask; >, state: this, dueTime: TimeSpan.FromSeconds(3), period: TimeSpan.FromSeconds(10)); _reminderRegistry = reminderRegistry; GrainContext = grainContext; > public async Task Ping() < _reminder = await _reminderRegistry.RegisterOrUpdateReminder( callingGrainId: GrainContext.GrainId, reminderName: ReminderName, dueTime: TimeSpan.Zero, period: TimeSpan.FromHours(1)); >void IDisposable.Dispose() < if (_reminder is not null) < _reminderRegistry.UnregisterReminder( GrainContext.GrainId, _reminder); >> >
- Определяет зерно POCO, реализующее IGrainBaseи IPingGrain IDisposable.
- Регистрирует таймер, который вызывается каждые 10 секунд и запускается через 3 секунды после регистрации.
- При Ping вызове регистрирует напоминание, которое вызывается каждый час и начинается сразу после регистрации.
- Метод Dispose отменяет напоминание, если оно зарегистрировано.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как перезапустить таймер в c
Одним из важнейших классов, находящихся в пространстве имени System.Threading, является класс Timer . Данный класс позволяет запускать определенные действия по истечению некоторого периода времени.
Например, нам надо запускать какой-нибудь метод через каждые 2000 миллисекунд, то есть раз в две секунды:
class Program < static void Main(string[] args) < int num = 0; // устанавливаем метод обратного вызова TimerCallback tm = new TimerCallback(Count); // создаем таймер Timer timer = new Timer(tm, num, 0, 2000); Console.ReadLine(); >public static void Count(object obj) < int x = (int)obj; for (int i = 1; i < 9; i++, x++) < Console.WriteLine($""); > > >
Первым делом создается объект делегата TimerCallback, который в качестве параметра принимает метод. Причем данный метод должен в качестве параметра принимать объект типа object .
И затем создается таймер. Данная перегрузка конструктора таймера принимает четыре параметра:
- объект делегата TimerCallback
- объект, передаваемый в качестве параметра в метод Count
- количество миллисекунд, через которое таймер будет запускаться. В данном случае таймер будет запускать немедленно после создания, так как в качестве значения используется 0
- интервал между вызовами метода Count
- Глава 1. Введение в C#
- Язык C# и платформа .NET
- Первая программа на C# с .NET CLI
- Начало работы с Visual Studio. Первая программа
- Первая программа на MacOS
- Первая программа на Linux
- Первое приложение в WSL
- Структура программы
- Переменные и константы
- Литералы
- Типы данных
- Консольный ввод-вывод
- Арифметические операции
- Поразрядные операции
- Операции присваивания
- Преобразования базовых типов данных
- Условные выражения
- Конструкция if..else и тернарная операция
- Циклы
- Массивы
- Задачи с массивами
- Методы
- Параметры методов
- Возвращение значения и оператор return
- Передача параметров по ссылке и значению. Выходные параметры
- Массив параметров и ключевое слово params
- Рекурсивные функции
- Локальные функции
- Конструкция switch
- Перечисления enum
- Классы и объекты
- Конструкторы, инициализаторы и деконструкторы
- Класс Program и метод Main. Программы верхнего уровня
- Структуры
- Типы значений и ссылочные типы
- Область видимости (контекст) переменных
- Пространства имен
- Глобальные пространства имен
- Подключение пространств имен по умолчанию
- Создание библиотеки классов в Visual Studio
- Создание библиотеки классов с помощью .NET CLI
- Модификаторы доступа
- Свойства
- Перегрузка методов
- Статические члены и модификатор static
- Установка пакетов Nuget
- Константы, поля и структуры для чтения
- Null и ссылочные типы
- Null и значимые типы
- Проверка на null, операторы ?. и ??
- Псевдонимы типов и статический импорт
- Наследование
- Преобразование типов
- Виртуальные методы и свойства
- Скрытие методов и свойств
- Различие переопределения и скрытия методов
- Абстрактные классы
- Класс System.Object и его методы
- Обобщенные типы
- Ограничения обобщений
- Наследование обобщенных типов
- Конструкция try..catch..finally
- Блок catch и фильтры исключений
- Типы исключений. Класс Exception
- Генерация исключения и оператор throw
- Создание классов исключений
- Поиск блока catch при обработке исключений
- Делегаты
- Применение делегатов
- Анонимные методы
- Лямбды
- События
- Ковариантность и контравариантность делегатов
- Делегаты Action, Predicate и Func
- Замыкания
- Определение интерфейсов
- Применение интерфейсов
- Явная реализация интерфейсов
- Реализация интерфейсов в базовых и производных классах
- Наследование интерфейсов
- Интерфейсы в обобщениях
- Копирование объектов. Интерфейс ICloneable
- Сортировка объектов. Интерфейс IComparable
- Ковариантность и контравариантность обобщенных интерфейсов
- Определение операторов
- Перегрузка операций преобразования типов
- Индексаторы
- Переменные-ссылки и возвращение ссылки
- Методы расширения
- Частичные классы и методы
- Анонимные типы
- Кортежи
- Records
- Паттерн типов
- Паттерн свойств
- Паттерны кортежей
- Позиционный паттерн
- Реляционный и логический паттерны
- Паттерны списков
- Список List
- Двухсвязный список LinkedList
- Очередь Queue
- Стек Stack
- Словарь Dictionary
- Класс ObservableCollection
- Интерфейсы IEnumerable и IEnumerator
- Итераторы и оператор yield
- Класс Array и массивы
- Span
- Индексы и диапазоны
- Строки и класс System.String
- Операции со строками
- Форматирование и интерполяция строк
- Класс StringBuilder
- Регулярные выражения
- Структура DateTime
- Форматирование дат и времени
- DateOnly и TimeOnly
- Отложенная инициализация и тип Lazy
- Математические вычисления и класс Math
- Преобразование типов и класс Convert
- Введение в многопоточность. Класс Thread
- Создание потоков. Делегат ThreadStart
- Потоки с параметрами и ParameterizedThreadStart
- Синхронизация потоков
- Мониторы
- Класс AutoResetEvent
- Мьютексы
- Семафоры
- Задачи и класс Task
- Работа с классом Task
- Задачи продолжения
- Класс Parallel
- Отмена задач и параллельных операций. CancellationToken
- Асинхронные методы, async и await
- Возвращение результата из асинхронного метода
- Последовательное и параллельное выполнение. Task.WhenAll и Task.WhenAny
- Обработка ошибок в асинхронных методах
- Асинхронные стримы
- Основы LINQ
- Проекция данных
- Фильтрация коллекции
- Сортировка
- Объединение, пересечение и разность коллекций
- Агрегатные операции
- Получение части коллекции
- Группировка
- Соединение коллекций
- Проверка наличия и получение элементов
- Отложенное и немедленное выполнение LINQ
- Делегаты в запросах LINQ
- Введение в Parallel LINQ. Метод AsParallel
- Метод AsOrdered
- Обработка ошибок и отмена параллельных операции
- Введение в рефлексию. Класс System.Type
- Применение рефлексии и исследование типов
- Исследование методов и конструкторов с помощью рефлексии
- Исследование полей и свойств с помощью рефлексии
- Динамическая загрузка сборок и позднее связывание
- Атрибуты в .NET
- DLR в C#. Ключевое слово dynamic
- DynamicObject и ExpandoObject
- Использование IronPython в .NET
- Сборщик мусора в C#
- Финализируемые объекты. Метод Dispose
- Конструкция using
- Указатели
- Указатели на структуры, члены классов и массивы
- Работа с дисками
- Работа с каталогами
- Работа с файлами. Классы File и FileInfo
- FileStream. Чтение и запись файла
- Чтение и запись текстовых файлов. StreamReader и StreamWriter
- Бинарные файлы. BinaryWriter и BinaryReader
- Архивация и сжатие файлов
- Сериализация в JSON. JsonSerializer
- XML-Документы
- Работа с XML с помощью System.Xml
- Изменение XML-документа
- XPath
- Linq to Xml. Создание Xml-документа
- Выборка элементов в LINQ to XML
- Изменение документа в LINQ to XML
- Сериализация в XML. XmlSerializer
- Процессы
- Домены приложений
- AssemblyLoadContext и динамическая загрузка и выгрузка сборок
- Native AOT
- Нововведения в C# 11
- Нововведения в C# 12
Помощь сайту
410011174743222
Перевод на карту
Номер карты:
4048415020898850Контакты для связи: metanit22@mail.ru
Copyright © metanit.com, 2023. Все права защищены.