Bonjour,
J'ai un petit blème avec un timer.
1. Je crée ce timer sur un événement Created d'un FilesSystemWatcher.
2. J'initialise les propriétés de ce timer (Interval, tick, start())
3. Je place ce timer dans un ArrayList.
Résultat : l'évent. tick de ce timer n'arrive jamais.
Constatations : j'ai toujours mon timer dans ma liste, je peux lire ses propriétés.
Si par contre je crée ce timer sur un click de bouton (je le place aussi dans la liste), l'évent tick se déclenche sans problèmes.
L'événement Created du fsw est threadé. Mais je ne comprends pas pourquoi cela empèche l'event tick du timer de se déclencher.
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 public partial class Form1 : Form { private FileSystemWatcher fsw; private ArrayList al; public Form1() { InitializeComponent(); fsw = new FileSystemWatcher(); fsw.Path = "C:\\temp"; fsw.Created += new FileSystemEventHandler(fsw_Created); fsw.EnableRaisingEvents = true; al = new ArrayList(); } void fsw_Created(object sender, FileSystemEventArgs e) { lock (al) { al.Add(new TTest(al)); } } private void button1_Click(object sender, EventArgs e) { al.Add(new TTest(al)); } } class TTest { public Timer t; private ArrayList Owner; public TTest(ArrayList aOwner) { Owner = aOwner; t = new Timer(); t.Interval = 3000; t.Tick += new EventHandler(t_Tick); t.Start(); } void t_Tick(object sender, EventArgs e) { t.Stop(); Owner.Remove(this); } } }
En fait, si je mets fsw.SynchronizingObject = this à la création du fsw il n'y a pas de problème. (ou CheckForIllegalCrossTreadCalls = false). Le problème est que dans mon programme, le fsw n'est pas un champ d'une Windows Form (comme dans mon exemple) mais d'un objet "maison".
Si quelqu'un à une petite idée ??
Bonne fin de journée à tous !!
Partager