Bonjour à tous,
Je suis en train de développer un nouveau programme avec un autre développeur, et pour faciliter la maintenance, j'ai pour mission de réaliser une nouvelle fenêtre qui réaliserait la fonction de fenêtre Debug.
Elle serait mis en arrière plan du programme et se mettrait à jour instantanément selon les éléments de la classe Trace que l'on a dissimulé dans le code du programme principale. Les élement de la classe Trace sont les méthodes Write, WriteIF, TraceError, TraceInformation, etc. dans le but de pouvoir retrouver plus facilement la partie du programme qui génèrent des erreurs.
Ma fenêtre de débug serait composé d'une ListBox permettant de stocker les informations provenant des méthodes de la Classe Trace et d'un bouton pour Activer / Désactiver les listeners provenant de la classe Trace afin de pouvoir choisir quand on veut visualiser les informations.
En gros le fonctionnement, lorsque j'active l'écoute des listeners j'enregistre dans la ListBox tous les éléments que je recois et quand je désactive le bouton j'arrête de regarder ce que provient des listeners.
J'ai donc pensé à créer un Thread dans la fenêtre principale qui créerait une nouvelle instance de ma fenêtre Debug en lui transferant tous les éléments de Trace que je rencontre à l'aide de délégué.
Mais comme je ne connais pas bien les thread, ca ne marche pas du tout ... :'(
Donc comment faire pour créer une Form à partir d'un thread ?
Est il possible de passer au thread des éléments à d'autres moments qu'a sa création ?
L'utilisation d'un BackgroundWorker serait plus intéressant ?
Toute idée pour faire fonctionner cette fenetre est la bienvenue !! ;D
Le code que j'utilise actuellement pour mon thread est le suivant :
Code Fenêtre Main
Code cs : 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 myThread = new Thread(new ThreadStart(DoWork)); myThread.Start(); public static void DoWork() { Debug.frmDebug frmDebug = new Debug.frmDebug(); frmDebug.Show(); while (myThread.IsAlive) { // Délégué de ma fenêtre Débug pour transmettre un élément de Trace frmDebug.AddTraceEvent(TraceEventType.Error, "Mon premier message d'erreur"); Thread.Sleep(1000); } }
Code fenêtre Debug
Code cs : 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 public partial class frmDebug : DevExpress.XtraEditors.XtraForm { public delegate void TraceEventDebug(TraceEventType typeEvent, string message); public event TraceEventDebug mesTracesEvents; public frmDebug() { InitializeComponent(); Trace.Listeners.Clear(); int index = Trace.Listeners.Add(new TextWriterTraceListener(new MemoryStream(),"Debug Perso")); Trace.AutoFlush = true; mesTracesEvents = new TraceEventDebug(this.AddTraceEvent); } public void AddTraceEvent(TraceEventType typeEvent, string messageEvent) { switch (typeEvent) { case TraceEventType.Information : Trace.TraceInformation(messageEvent); break; case TraceEventType.Error: Trace.TraceError(messageEvent); break; case TraceEventType.Warning: Trace.TraceWarning(messageEvent); break; default : Trace.WriteLine(messageEvent); break; } } }
De plus avec le thread et la méthode Show(), je ne voit pas les controls que j'ai définie dans cette fenetre.
Comment faire pour les afficher ?
Merci d'avance.
A++
Partager