Juste ce - Comment pouvez-vous ajouter une minuterie pour une application console C#? Il serait génial si vous pouviez fournir quelques exemple de codage.
Réponses
Trop de publicités?C'est très beau, mais dans le but de simuler un certain temps passant, nous avons besoin d'exécuter une commande qui prend un peu de temps et c'est très clair dans le deuxième exemple.
Toutefois, le style de l'aide d'une boucle for pour faire quelques fonctionnalités pour toujours prend beaucoup de ressources de périphérique et au lieu de cela, nous pouvons utiliser le Garbage Collector de faire quelque chose comme ça.
Nous pouvons voir cette modification dans le code à partir du même livre CLR Via C# Troisième Ed.
using System;
using System.Threading;
public static class Program {
public static void Main() {
// Create a Timer object that knows to call our TimerCallback
// method once every 2000 milliseconds.
Timer t = new Timer(TimerCallback, null, 0, 2000);
// Wait for the user to hit <Enter>
Console.ReadLine();
}
private static void TimerCallback(Object o) {
// Display the date/time when this method got called.
Console.WriteLine("In TimerCallback: " + DateTime.Now);
// Force a garbage collection to occur for this demo.
GC.Collect();
}
}
Utiliser le Système.Le filetage.Classe Timer.
Système.De Windows.Les formulaires.La minuterie est conçu principalement pour une utilisation dans un seul thread généralement les Windows Forms thread d'INTERFACE utilisateur.
Il existe également un Système.Minuteries classe ajoutée dès le début du développement de la .NET framework. Toutefois, il est généralement recommandé d'utiliser le Système.Le filetage.Classe Timer plutôt que c'est juste un wrapper autour de Système.Le filetage.Minuterie de toute façon.
Il est également recommandé de toujours utiliser un statique (partagé VB.NET).Le filetage.Minuterie si vous développez un Service Windows et nécessitent une minuterie pour exécuter périodiquement. Cela évitera peut-être prématuré, la collecte des ordures de votre objet timer.
Voici un exemple d'une minuterie dans une application console:
using System;
using System.Threading;
public static class Program
{
public static void Main()
{
Console.WriteLine("Main thread: starting a timer");
Timer t = new Timer(ComputeBoundOp, 5, 0, 2000);
Console.WriteLine("Main thread: Doing other work here...");
Thread.Sleep(10000); // Simulating other work (10 seconds)
t.Dispose(); // Cancel the timer now
}
// This method's signature must match the TimerCallback delegate
private static void ComputeBoundOp(Object state)
{
// This method is executed by a thread pool thread
Console.WriteLine("In ComputeBoundOp: state={0}", state);
Thread.Sleep(1000); // Simulates other work (1 second)
// When this method returns, the thread goes back
// to the pool and waits for another task
}
}
Dans le livre CLR Via C# par Jeff Richter. Par la façon dont ce livre décrit le raisonnement derrière les 3 types de minuteries dans le Chapitre 23, fortement recommandé.
Voici le code pour créer un simple, un deuxième cycle d'horloge:
using System;
using System.Threading;
class TimerExample
{
static public void Tick(Object stateInfo)
{
Console.WriteLine("Tick: {0}", DateTime.Now.ToString("h:mm:ss"));
}
static void Main()
{
TimerCallback callback = new TimerCallback(Tick);
Console.WriteLine("Creating timer: {0}\n",
DateTime.Now.ToString("h:mm:ss"));
// create a one second timer tick
Timer stateTimer = new Timer(callback, null, 0, 1000);
// loop here forever
for (; ; ) { }
}
}
Et voici le résultat:
c:\temp>timer.exe
Creating timer: 5:22:40
Tick: 5:22:40
Tick: 5:22:41
Tick: 5:22:42
Tick: 5:22:43
Tick: 5:22:44
Tick: 5:22:45
Tick: 5:22:46
Tick: 5:22:47
Permet d'Avoir Un peu de Plaisir
using System;
using System.Timers;
namespace TimerExample
{
class Program
{
static Timer timer = new Timer(1000);
static int i = 10;
static void Main(string[] args)
{
timer.Elapsed+=timer_Elapsed;
timer.Start();
Console.Read();
}
private static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
i--;
Console.Clear();
Console.WriteLine("=================================================");
Console.WriteLine(" DIFFUSE THE BOMB");
Console.WriteLine("");
Console.WriteLine(" Time Remaining: " + i.ToString());
Console.WriteLine("");
Console.WriteLine("=================================================");
if (i == 0)
{
Console.Clear();
Console.WriteLine("");
Console.WriteLine("==============================================");
Console.WriteLine(" B O O O O O M M M M M ! ! ! !");
Console.WriteLine("");
Console.WriteLine(" G A M E O V E R");
Console.WriteLine("==============================================");
timer.Close();
timer.Dispose();
}
GC.Collect();
}
}
}