Есть ли класс таймера в С#, который не находится в пространстве имен Windows.Forms?
Я хочу использовать таймер в своем простом .NET приложении, написанном на С#. Единственное, что я могу найти, это класс Windows.Forms.Timer. Я не хочу ссылаться на это пространство имен только для моего консольного приложения.
Существует ли класс С# (или таймер) для использования в консольных приложениях?
Ответы
Ответ 1
System.Timers.Timer
И как говорит MagicKat:
System.Threading.Timer
Здесь вы можете увидеть различия:
http://intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/
И здесь вы можете увидеть примеры MSDN:
http://msdn.microsoft.com/en-us/library/system.timers.timer(VS.80).aspx
И здесь:
http://msdn.microsoft.com/en-us/library/system.threading.timer(VS.80).aspx
Ответ 2
Я бы рекомендовал Timer
класс в System.Timers
. Также интересен класс Timer
в System.Threading
namespace.
using System;
using System.Timers;
public class Timer1
{
private static Timer aTimer = new System.Timers.Timer(10000);
public static void Main()
{
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
}
// Specify what you want to happen when the Elapsed event is
// raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
}
Пример из документов MSDN.
Ответ 3
Есть, по крайней мере, System.Timers.Timer и System.Threading.Timer, о которых я знаю.
Если вы еще не сделали этого, обратите внимание на то, что, если вы еще этого не сделали раньше, скажите, если у вас уже есть пространство имен System.Threading в вашем объявлении, но вы действительно хотите использовать таймер в System.Timers вам нужно для этого:
using System.Threading;
using Timer = System.Timers.Timer;
У Джона Скита есть статья только на Таймерах в его многопоточном руководстве, это стоит прочитать:
http://www.yoda.arachsys.com/csharp/threads/timers.shtml
Ответ 4
Этот вопрос старый, и существующие ответы хорошо отражают проблему, как это было в то время. Тем временем произошло что-то новое.
Таймер, конечно, для чего?
Использование таймера - способ запуска некоторой обработки с некоторой задержкой и/или с регулярным интервалом. Есть два случая:
(1) он просто запускает короткий код периодически без каких-либо проблем с потоком, без проблем, без беспорядка. Если простой таймер Windows Forms не подходит, то System.Timers.Timer
с его свойством SynchronizingObject
делает его более простым, чем System.Threading.Timer
.
(2) то, что вы кодируете, находится в сфере асинхронной параллельной обработки. Это традиционно было подвержено ошибкам, трудно отлаживалось, чтобы получить право, независимо от используемого таймера.
В случае 2 вы можете уйти с традиционным подходом, но будьте осторожны, сложность скрывается и готова съесть вас не один раз, а в любое время, когда вы просто не сделаете лучший выбор с кумулятивными эффектами.
Теперь у нас есть что-то лучшее
Если ваша ситуация имеет дело с какой-либо "обработкой событий" (независимо от того, как она закодирована: нажатия клавиш, кнопки мыши, байты из последовательного порта, из сетевого соединения, из измерений и т.д.), вы должны рассмотреть "Реактивное программирование".
Реактивное программирование в последние годы как-то обнаружило, как кодировать эти ситуации, не попадая в ловушки сложности.
Итак, технически следующая ссылка является ответом на вопрос: это таймер, который находится в пространстве имен System.Reactive.Linq
: Observable.Timer Method ( System.Reactive.Linq)
Чтобы быть справедливым, это таймер, который приходит и играет хорошо с мышлением реактивного программирования и множеством вещей, изменяющих игру. Тем не менее, это может быть или не быть лучшим инструментом, в зависимости от контекста.
Поскольку этот вопрос является .NET-ориентированным, вас может заинтересовать Хорошее знакомство с .NET Reactive Framework
Или для четкого, иллюстрированного, более общего (не ориентированного на Microsoft) документа, это кажется хорошим Вступление к реактивному программированию, которое вы пропустили.
Ответ 5
System.Diagnostics.Stopwatch, если ваша цель состоит в том, сколько времени требуется для выполнения
Ответ 6
Рекомендуется не использовать System.Timer
Timer class.