Есть ли в C# класс таймера, которого нет в пространстве имен Windows.Forms?
-
05-07-2019 - |
Вопрос
Я хочу использовать таймер в моем простом .СЕТЬ приложение, написанное на C#.Единственный, который я могу найти, это класс Windows.Forms.Timer.Я не хочу ссылаться на это пространство имен только для своего консольного приложения.
Существует ли класс таймера C# (или таймера) для использования в консольных приложениях?
Решение
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
Другие советы
Я бы порекомендовал Таймер
класс в System.Timers
Пространство имен. Также представляет интерес Таймер
класс в System.Threading
Пространство имен.
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.
По крайней мере, существует System.Timers.Timer и классы System.Threading.Timer , которые я Я в курсе. Р>
Однако следует обратить внимание на одну вещь (если вы еще этого не сделали), скажите, если у вас уже есть пространство имен System.Threading в предложении using, но вы действительно хотите использовать таймер в System.Timers, который вам нужен сделать это:
using System.Threading;
using Timer = System.Timers.Timer;
У Джона Скита есть статья о таймерах в его многопоточном руководстве, которую стоит прочитать: http://www.yoda.arachsys.com/csharp/threads/timers.shtml р>
Этот вопрос старый и существующие ответы хорошо охватывают проблему, как это было в то время. Тем временем произошло что-то новое.
Таймер, конечно, для чего?
Использование таймера - это способ запустить некоторую обработку с некоторой задержкой и / или с регулярным интервалом. Есть два случая:
(1) это просто для того, чтобы периодически запускать короткий код без каких-либо проблем с потоками, без проблем, без проблем. Если простой таймер Windows Forms не подходит, то System.Timers.Timer
со свойством SynchronizingObject
делает его более простым, чем System.Threading.Timer
.
(2) то, что вы кодируете, находится в области асинхронной параллельной обработки. Это традиционно было подвержено ошибкам, трудно отладить, получить правильную информацию, независимо от того, какой таймер использовался.
В случае 2 вы можете отказаться от традиционного подхода, но будьте осторожны, сложность скрывается и готова съесть вас не один раз, а в любой момент, когда вы просто не сделаете лучший выбор с кумулятивными эффектами.
Теперь у нас есть что-то лучше
Если ваша ситуация связана с каким-то " событием " обработка (независимо от того, как она кодируется: нажатия клавиш, кнопки мыши, байты от последовательного порта, от сетевого подключения, от измерений и т. д.), вы должны рассмотреть Реактивное программирование.
Реактивное программирование в последние годы каким-то образом раскрыло, как кодировать эти ситуации, не попадая в ловушки сложности.
Итак, технически следующая ссылка является ответом на вопрос: это таймер, который находится в пространстве имен System.Reactive.Linq
: Метод Observable.Timer (System.Reactive.Linq) р>
Честно говоря, это таймер, который подходит и хорошо сочетается с мышлением Reactive Programming и множеством изменяющих игру вещей. Тем не менее, это может или не может быть лучшим инструментом, в зависимости от контекста.
Поскольку этот вопрос ориентирован на .NET, вас может заинтересовать Хороший введение в .NET Reactive Framework
Или для ясного, иллюстрированного, более общего (не ориентированного на Microsoft) документа этот документ выглядит хорошо введение в реактивное программирование, которое вы пропустили .
System.Diagnostics.Stopwatch , если ваш цель состоит в том, чтобы определить, сколько времени нужно, чтобы бежать
Рекомендуется не использовать класс Timer для System.Timer
.