Есть ли в C# класс таймера, которого нет в пространстве имен Windows.Forms?

StackOverflow https://stackoverflow.com/questions/169332

  •  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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top