Я переношу приложение с Java на C# и столкнулся с проблемой, связанной с различным поведением и функциями между java.util.Timer и System.Threading.Timer. На самом деле, в Java-версии класса Timer есть функция (используемая в исходном коде) для планирования задач, которой нет в .NET-версии, где можно запланировать одну задачу (через функцию делегата) на время.
Есть ли решение, хотя бы небольшой набор классов для реализации этой функции?
Я заметил существование нескольких библиотек планирования (например, Quartz), но я бы предпочел решение, которое минимизирует объем используемого кода.
Спасибо вам всем! :)
Ответ 1 · рейтинг 1 · Allon Guralnek
Вы можете просто использовать любой класс таймера. Для каждой запланированной задачи создайте новый класс таймера и просто установите для свойства Interval значение (ScheduledTime - DateTime.Now).TotalMilliseconds и задайте AutoReset значение false (или свойство Enabeld - значение false в коде программной части для события Tick). Это выполнит ваш код один раз в указанное ScheduledTime.
Ответ 2 · рейтинг 1 · Robert Fraser
В .NET есть как минимум 4 таймера. Ваш короткий ответ: используйте System.Threading.Timer. Я рекомендую прочитать о таймерах здесь здесь, а также просмотр System.Windows.Threading.DispatchTimer (часть WPF), который может отправлять события в определенное время, но делает это в потоке пользовательского интерфейса.