J'essaye de bien comprendre comment fonctionnent les delegate et event (ce dont j'ai toujours pu me passer)
J'ai fait un petit programme à la c** avec 2 boucles dans 2 threads.
L'un affiche des "." toutes les secondes
L'autre, affiche un message à la pression de la touche 'y'
Jusque là, tout va bien.
Maintenant, je voudrais créer un évenement dans la class principale à la pression de la touche 'y' (une version sans et une avec passage de paramètre) puis, si c'est possible, provoquer un évenement dans l'autre thread (avec la version sans et avec paramètres).
je suis coincé là :
using System;
using System.Threading;
public class monThread1
{
public delegate void DelegateEvenement (string message);
public event DelegateEvenement Evenement;
public monThread1 ()
{
Thread th = new Thread (new ThreadStart (this.Run));
Console.WriteLine ("monThread1 démarre");
th.Start();
}
public void Run ()
{
int i = 0;
while (i < 100) {
Console.Write (".");
Thread.Sleep (1000);
i++;
}
}
}
public class monThread2
{
public monThread2 ()
{
Thread th = new Thread (new ThreadStart (this.Run));
Console.WriteLine ("monThread2 démarre");
th.Start();
}
public void Run ()
{
while (true) {
ConsoleKeyInfo x = new ConsoleKeyInfo ();
x = Console.ReadKey ();
if (x.KeyChar == 'y') {
Console.Write("'t2:y'");
/*if (Evenement != null)
Evenement ("!Y!");*/
}
Thread.Sleep (100);
}
}
}
public class thread_evenement
{
static public monThread1 t1;
static public monThread2 t2;
public static void Main (string[] args)
{
t1 = new monThread1 ();
t2 = new monThread2 ();
}
public void Evenement ()
{
Console.WriteLine ("\nTouche y préssée dans thread2\n");
}
}
Merci d'avance :$
Ne vous inscrivez surtout pas aux certifications. Pas crédibles, payantes, et aucun suivi en cas de bug.
Pourquoi tu ne gères pas l'événement dans ton thread 2 ?
class Program
{
static public monThread1 t1;
static public monThread2 t2;
public static void Main(string[] args)
{
t1 = new monThread1();
t2 = new monThread2();
t2.evenement += t2_evenement;
}
static void t2_evenement(string message)
{
Console.WriteLine("Touche recue : " + message);
}
}
public class monThread1
{
public monThread1()
{
Thread th = new Thread(Run);
Console.WriteLine("monThread1 démarre");
th.Start();
}
public void Run()
{
int i = 0;
while (i < 100)
{
Console.Write(".");
Thread.Sleep(1000);
i++;
}
}
}
public class monThread2
{
public delegate void DelegateEvenement(string message);
public event DelegateEvenement evenement;
public monThread2()
{
Thread th = new Thread(Run);
Console.WriteLine("monThread2 démarre");
th.Start();
}
public void Run()
{
while (true)
{
ConsoleKeyInfo x = Console.ReadKey();
if (x.KeyChar == 'y')
{
Console.Write("'t2:y'");
if (evenement != null)
evenement("!Y!");
}
Thread.Sleep(100);
}
}
}
Merci, maintenant que mon code fonctionne, je comprends mieux le procédé.
Ne vous inscrivez surtout pas aux certifications. Pas crédibles, payantes, et aucun suivi en cas de bug.
delegate event
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.