Bonjour à tous,
Je viens vers vous car j'ai besoin d'explications sur la réaction du déclenchement d'événement.

Voilà :
J'ai créé une classe où j'utilise le code de l'exemple de MSDN pour générer un événement. http://msdn.microsoft.com/fr-fr/libr.../wkzf914z.aspx
Pourquoi, lorsque j'instancie l'événement et fait un start, je reste dans la boucle du "while" qui a pour effet de ne plus me laisser la main sur ma forme (plus d'évolution de mon soft, plus d'affichage, la boucle n'est pas en tache de fond) ?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
 
public class AlarmEventArgs : EventArgs
{
   private DateTime alarmTime;
   private bool snoozeOn = true;
 
   public AlarmEventArgs(DateTime time)
   {
      this.alarmTime = time;
   }
 
   public DateTime Time
   {
      get { return this.alarmTime; }
   }
 
   public bool Snooze
   {
      get { return this.snoozeOn; }
      set { this.snoozeOn = value; }
   }   
}
 
public class Alarm
{
   private DateTime alarmTime;
   private int interval = 10;
 
   public event AlarmEventHandler AlarmEvent;
 
   public Alarm(DateTime time) : this(time, 10)
   {
   }
 
   public Alarm(DateTime time, int interval)
   {
      this.alarmTime = time;
      this.interval = interval;
   }
 
   public void Set()
   {
      while (true) {
         System.Threading.Thread.Sleep(2000);
         DateTime currentTime = DateTime.Now;
         // Test whether it is time for the alarm to go off.
         if (currentTime.Hour == alarmTime.Hour && 
             currentTime.Minute == alarmTime.Minute)
         {    
            AlarmEventArgs args = new AlarmEventArgs(currentTime);
            OnAlarmEvent(args);
            if (! args.Snooze) 
               return;
            else
               this.alarmTime = this.alarmTime.AddMinutes(this.interval);
         }
      }
   } 
 
   protected void OnAlarmEvent(AlarmEventArgs e)
   {
      AlarmEvent(this, e);
   }  
}

Pour résoudre ce problème, j'ai créé et lancé un "thread" sur set(). L'ensemble reste fonctionnel avec les mêmes réactions.
Cela perd de son sens !?

J'ai cependant dû passer à coté de quelque chose?
En vous remerciant pour votre aide.
Cordialement.