Bonjour à tous,
je viens vers vous pour m'aider à résoudre un petit problème .
En effet pour faire simple j'ai une application qui lance une fenêtre , lors d'un click sur cette fenêtre elle se ferme, laisse apparaître fenêtre2 et lance un thread qui compte 3 secondes. Si au bout de 3 secondes aucune action n'est réaliser sur fenêtre2 alors le thread lance un évent qui doit normalement ré afficher la première fenêtre.
le code suivant :
mon timer :
maintenant le code de mon applis principale :
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 public class Timer { private int _decompte; public delegate void screenSaverTime(); public event screenSaverTime OnScreenSaverTime; public Timer(int tempsVeille) { this.Decompte = tempsVeille; } public int Decompte { get { return _decompte; } set { _decompte = value; } } public void start() { while (this.Decompte>0) { Thread.Sleep(1000); this.Decompte--; } if (OnScreenSaverTime != null) { OnScreenSaverTime(); } } }
C'est au moment où je rentre dans la fonction chronoVeille_OnScreenSaverTime() et que je veux faire un show() sur ma fenêtre de veille que l'on me signifie que le thread apellant n'est pas propriétaire .
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 public class AcceuilViewModel { private Veille veille; public Veille Veille { get { return veille; } set { veille = value; } } private Timer chronoVeille; private Thread timerThread; public AcceuilViewModel() { this.Veille = new Veille(); this.Veille.Show(); this.chronoVeille = new Timer(2); this.timerThread = new Thread(this.chronoVeille.start); this.chronoVeille.OnScreenSaverTime += new Timer.screenSaverTime(chronoVeille_OnScreenSaverTime); this.Veille.MouseDown += new System.Windows.Input.MouseButtonEventHandler(veille_MouseDown); this.timerThread.SetApartmentState(ApartmentState.STA); } void veille_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { this.Veille.Close(); this.timerThread.Start(); } private void chronoVeille_OnScreenSaverTime() { this.Veille.Show(); }
Quelqu'un a t'il une idée sur la manière dont je pourrai contourner ce problème ?
ps : le type veille est en fait un dérivé de Surfacewindow
en vous remerciant par avance
Partager