Bonjour,
Je suis débutant en C# et je tombe sur un problème au niveau de l’affichage de mon WinForm.
J’ai décidé de bien séparer la partie «*graphique*» de la partie «*traitement*» dans mon projet. Pour cela je lance un «*thread*» qui va représenter le schéma bloc de mon appli (graphcet). Je gère les étapes à l’aide d’un "switch/case" et d’une variable externe. Si cette dernière prend, par exemple, la valeur «*open_fenetre_1*» alors je fais un fenetre_1.show() puis je me mets en attente (variable externe = attente).
Mon appli ne se ferme pas car j’attends un événement que j’active quand je veux quitter.
Le code est le suivant*:
Programme main*:
Classe traitement*:
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 using System; using System.Collections.Generic; using System.Windows.Forms; using System.Threading; namespace Essai_Show_Appli_Windows { static class Program { /// <summary> /// Point d'entrée principal de l'application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Cls_Traitement.ref_Frm_Windows_1 = new Frm_Windows_1(); Cls_Traitement.ref_Frm_Windows_2 = new Frm_Windows_2(); Cls_Traitement.MonEvent = new System.Threading.EventWaitHandle(false, EventResetMode.ManualReset); Cls_Traitement.case_etat_fenetre = Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_OPEN; Cls_Traitement.MonThread = new System.Threading.Thread(Cls_Traitement.ThreadProc); Cls_Traitement.case_etat_fenetre = Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_OPEN; Cls_Traitement.MonThread.Start(); Cls_Traitement.MonEvent.WaitOne(); } } }
Mon souci est que la fenêtre ne s’affiche pas correctement (elle est toute blanche). Quel est le problème*??
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 using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Windows.Forms; namespace Essai_Show_Appli_Windows { class Cls_Traitement { public enum Etat_Fenetre { //Etat Fenêtre Choix version ODISSEE SELECT_IHM_ChoixVersion_OPEN, SELECT_IHM_ChoixVersion_CLOSE, SELECT_IHM_ChoixVersion_WAIT }; //Liste des états possibles pour chaque fenêtre public static Etat_Fenetre case_etat_fenetre; public static bool bool_sortie_boucle_processus; public static Frm_Windows_1 ref_Frm_Windows_1; public static Frm_Windows_2 ref_Frm_Windows_2; public static Thread MonThread; public static EventWaitHandle MonEvent; public static void ThreadProc() { while (Cls_Traitement.bool_sortie_boucle_processus == false) { switch ( Cls_Traitement.case_etat_fenetre) { case Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_OPEN : Cls_Traitement.ref_Frm_Windows_1.Show(); Cls_Traitement.case_etat_fenetre = Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_WAIT; break; case Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_WAIT : // On fait rien (attente du chgt de la variable Etat_Fenetre break; case Cls_Traitement.Etat_Fenetre.SELECT_IHM_ChoixVersion_CLOSE : Cls_Traitement.ref_Frm_Windows_1.Close(); Cls_Traitement.case_etat_fenetre = Etat_Fenetre.SELECT_IHM_ChoixVersion_WAIT; Cls_Traitement.bool_sortie_boucle_processus = true; break; } Thread.Sleep(100); } Cls_Traitement.MonEvent.Set(); } } }
Merci.
Partager