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

}

}

}