Domanda

Voglio usare un timer nella mia semplice .NET scritta in C #. L'unica che riesco a trovare è la classe Windows.Forms.Timer. Non voglio fare riferimento a questo spazio dei nomi solo per la mia applicazione console.

Esiste una classe timer C # (o timer simile) da utilizzare nelle applicazioni console?

È stato utile?

Soluzione

System.Timers.Timer

E come dice MagicKat:

System.Threading.Timer

Puoi vedere le differenze qui: http://intellitect.com/system-windows-forme-timer-vs-sistema-threading-timer-vs-system-timer-timer/

E puoi vedere esempi di MSDN qui:

http://msdn.microsoft .com / it-it / library / System.Timers.Timer (VS.80) aspx

E qui:

http://msdn.microsoft .com / it-it / library / System.Threading.Timer (VS.80) aspx

Altri suggerimenti

Consiglierei il Timer nella System.Timers spazio dei nomi. Interessante anche il Timer classe nel System.Threading spazio dei nomi.

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

Esempio dai documenti MSDN.

Esistono almeno System.Timers.Timer e System.Threading.Timer che I sono a conoscenza di.

Una cosa da tenere d'occhio (se non l'hai già fatto prima), dire se hai già il System.Threading namespace nella clausola using già ma in realtà vuoi usare il timer in System. per fare questo:

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

Jon Skeet ha un articolo su Timers nella sua guida multithreading, vale la pena leggere: http://www.yoda.arachsys.com/csharp/threads/timers.shtml

Questa domanda è vecchia e le risposte esistenti coprono bene il problema com'era allora. Nel frattempo, è successo qualcosa di nuovo.

Timer, certo, per cosa?

L'uso di un timer è un modo per eseguire l'elaborazione con un certo ritardo e / o ad intervalli regolari. Esistono due casi:

(1) è solo per eseguire periodicamente un codice breve senza alcun problema di thread, nessun problema, nessun pasticcio. Se il semplice timer di Windows Form non è adatto, System.Timers.Timer con la sua proprietà SynchronizingObject lo rende più semplice di System.Threading.Timer .

(2) quello che stai codificando è nel regno dell'elaborazione simultanea asincrona. Questo è stato tradizionalmente soggetto a errori, difficile da eseguire il debug, per funzionare correttamente, qualunque sia il semplice timer utilizzato.

Nel caso 2 potresti scappare con l'approccio tradizionale, ma attenzione, la complessità è in agguato e pronta a mangiarti non solo una volta ma ogni volta che non fai la scelta migliore, con effetti cumulativi.

Ora abbiamo qualcosa di meglio

Se la tua situazione ha a che fare con un qualche tipo di "evento" gestione (indipendentemente dal modo in cui è codificato: pressioni di tasti, pulsanti del mouse, byte da una porta seriale, da una connessione di rete, da misurazioni, ecc.), dovresti prendere in considerazione la programmazione reattiva.

La programmazione reattiva negli ultimi anni ha in qualche modo scoperto come codificare queste situazioni, senza cadere in trappole della complessità.

Quindi, tecnicamente il seguente link è una risposta alla domanda: è un timer che si trova nello spazio dei nomi System.Reactive.Linq : Metodo Observable.Timer (System.Reactive.Linq)

Per essere onesti, è un timer che arriva e gioca bene con la mentalità di Programmazione Reattiva e molte cose che cambiano il gioco. Tuttavia potrebbe essere o meno lo strumento migliore, a seconda del contesto.

Poiché questa domanda è basata su .NET, potresti essere interessato a Buono introduzione a .NET Reactive Framework

O per un documento chiaro, illustrato, più generale (non incentrato su Microsoft), questo sembra buono The introduzione alla programmazione reattiva che ti sei perso .

System.Diagnostics.Stopwatch se il tuo l'obiettivo è stabilire quanto tempo impiega a funzionare

Si consiglia di non utilizzare la classe Timer di System.Timer .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top