Thread & Evénement
using System.Threading;
using System;
namespace
ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Lance l'horloge
ThreadHorloge threadHorloge = new ThreadHorloge(5);
threadHorloge.HeureMultipleDeCinq += AfficherHeure;
threadHorloge.DesactiverHorloge += DesactiverHeure;
threadHorloge.Active = true;
Thread t = new Thread(new ThreadStart(threadHorloge.AfficherMultipleDeCinq));
t.Start();
//Abonnement à l'évènement
Console.Out.WriteLine("Lancement de l'horloge réussi");
if(Console.In.ReadLine() == "s") threadHorloge.Active = false;
}
static private void AfficherHeure(object sender,AfficherHeureEvenement evenement)
{
Console.Out.WriteLine(evenement.Message);
}
static private void DesactiverHeure(object sender,DesactiverHorlogeEvenement evenement)
{
Console.Out.WriteLine(evenement.Message);
}
}
public class ThreadHorloge
{
private object synchroObject;
private int pasHorloge;
private Boolean active;
public event EventHandler<AfficherHeureEvenement> HeureMultipleDeCinq;
public event EventHandler<DesactiverHorlogeEvenement> DesactiverHorloge;
//Initialiser l'horloge et son pas
public ThreadHorloge(int pasHorloge)
{
this.pasHorloge = pasHorloge;
synchroObject = new object();
}
//Emettre un évènement
protected virtual void OnHeureMultipleDeCinq(AfficherHeureEvenement evenement)
{
HeureMultipleDeCinq(this,evenement);
}
protected virtual void OnHorlogeDesactivee(DesactiverHorlogeEvenement evenement)
{
DesactiverHorloge(this,evenement);
}
//Affiche 1 fois l'heure lorsque le nombre de minutes est un multiple de cinq (12:00,12:05,etc.)
public void AfficherMultipleDeCinq()
{
while(active == true)
{
if(DateTime.Now.Second % pasHorloge == 0)
{
OnHeureMultipleDeCinq(new AfficherHeureEvenement(DateTime.Now));
}
Thread.Sleep(1000);
}
OnHorlogeDesactivee(new DesactiverHorlogeEvenement(DateTime.Now));
}
//Permet d' activer l'horloge ou à arrêter le thead de l'horloge
public Boolean Active
{
get{return active;}
set{
lock(synchroObject)
{
active = value;
}
}
}
}
public class AfficherHeureEvenement:EventArgs
{
private string message;
public AfficherHeureEvenement(DateTime heure)
{
this.message ="Il est " + heure.ToString();
}
public string Message
{
get{return message;}
}
}
public class DesactiverHorlogeEvenement:EventArgs
{
public string message;
public DesactiverHorlogeEvenement(DateTime heure)
{
this.message = "Horloge désactivée à " + heure;
}
public String Message
{
get{return message;}
}
}
}