Existe uma classe de temporizador em C# que não está no espaço para nome do Windows.Forms?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu quero usar um cronômetro no meu simples .INTERNET Aplicação escrita em C#. O único que posso encontrar é a classe Windows.Forms.Timer. Não quero fazer referência a este espaço de nome apenas para o meu aplicativo de console.

Existe uma classe C# timer (ou timer) para uso em aplicativos de console?

Foi útil?

Solução

System.timers.timer

E como Magickat diz:

System.Threading.timer

Você pode ver as diferenças aqui: http://intellitect.com/system-windows-forms-timer-vs-system-threading-timer-vs-system-timers-timer/

E você pode ver exemplos do MSDN aqui:

http://msdn.microsoft.com/en-us/library/system.timers.timer(vs.80).aspx

E aqui:

http://msdn.microsoft.com/en-us/library/system.threading.timer(vs.80).aspx

Outras dicas

Eu recomendaria o Timer classe no System.Timers espaço para nome. Também de interesse, o Timer classe no System.Threading espaço para nome.

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);
    }
}

Exemplo da MSDN Docs.

Existem pelo menos o System.timers.timer e System.Threading.timer Aulas que eu estou ciente.

Uma coisa a se observar (se você ainda não fez isso antes), digamos se você já possui o Sistema. :

using System.Threading;
using Timer = System.Timers.Timer;

Jon Skeet tem um artigo apenas sobre temporizadores em seu guia de multithreading, vale a pena ler:http://www.yoda.arachsys.com/csharp/threads/timers.shtml

Esta pergunta é antiga e as respostas existentes cobrem bem a questão como era na época. Enquanto isso, algo novo aconteceu.

Timer, claro, para quê?

Usar um cronômetro é uma maneira de executar algum processamento com algum atraso e/ou em intervalo regular. Existem dois casos:

(1) É apenas para executar um código curto periodicamente, sem qualquer preocupação do tópico, sem problemas, sem bagunça. Se o timer de formulários do Windows simples não for adequado, então System.Timers.Timer com seu SynchronizingObject a propriedade torna mais direta do que System.Threading.Timer .

(2) O que você está codificando é no reino do processamento simultâneo assíncrono. Tradicionalmente, isso tem sido propenso a erros, difícil de depurar, para acertar, seja qual for o timer simples usado.

No caso 2, você pode se safar da abordagem tradicional, mas cuidado, a complexidade está à espreita e pronta para comer não apenas uma vez, mas a qualquer momento, você simplesmente não faz a melhor escolha, com efeitos cumulativos.

Agora temos algo melhor

Se a sua situação lidar com algum tipo de manuseio de "evento" (seja qual for a codificação: teclas, botões do mouse, bytes de uma porta serial, de uma conexão de rede, de medições, etc.), considere programação reativa.

A programação reativa, nos últimos anos, descobriu de alguma forma como codificar essas situações, enquanto não caiu em armadilhas de complexidade.

Então, tecnicamente, o link a seguir é uma resposta para a pergunta: é um timer que está no System.Reactive.Linq namespace: Observable.timer Method (System.Retive.Linq)

Para ser justo, é um cronômetro que vem e joga bem com a mentalidade de programação reativa e muitas coisas que mudam o jogo. No entanto, pode ou não ser a melhor ferramenta, dependendo do contexto.

Como esta pergunta é centrada no .NET, você pode estar interessado em Boa introdução à estrutura reativa .NET

Ou para um documento claro, ilustrado e mais geral (não centrado na Microsoft), isso parece bom A introdução à programação reativa que você está perdendo.

System.diagnostics.stopWatch Se o seu objetivo é o tempo, quanto tempo leva para correr para correr

É recomendado para não usar System.TimerClasse do temporizador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top