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*:

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();
        }
    }
}
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
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();
        }
    }
}
Mon souci est que la fenêtre ne s’affiche pas correctement (elle est toute blanche). Quel est le problème*??

Merci.