Problème ouverture Windows Forms
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:
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:
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.