Bonjour,
j'ai une fonction qui endort le thread courant indefiniment pour attendre des evennements. Donc pas de problème je fait un delegate dessus mais je ne recois aucun evennement... qui sont recueillis dans une autre fonction.
Voici mon code:
Le code de ma fonction qui bloque le thread courant
Le code de lancement de la fonction ci dessus avec le delegate:
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 public void thstart() { try { WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_ThreadStartTrace where ProcessID>5"); watcher.EventArrived += new EventArrivedEventHandler(HandleEvent); watcher.Start(); System.Threading.Thread.Sleep(-1); watcher.Stop(); return; } catch (ManagementException err) { richTextBox1.Text += ("Erreur: " + err.Message); } }
et enfin le code de la fonction qui recoit les evenements:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public delegate void delegatethstart(); private void button1_Click(object sender, EventArgs e) { delegatethstart dele_thread = new delegatethstart(thstart); IAsyncResult iAr; iAr = dele_thread.BeginInvoke(null, null); richTextBox1.Text += ("En attente du processus..." + textBox1.Text); }
Pour info quand je ne met pas le delegate l'application est bien entendu bloqué quand je le met l'interface est libre donc cela fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void HandleEvent(object sender, EventArrivedEventArgs e) { richTextBox1.Text += ("Nom process:" + e.NewEvent["ThreadID"]); richTextBox1.Text += ("pid PROCESS: " + e.NewEvent["ProcessID"]); richTextBox1.Text += ("Pid thread :" + e.NewEvent["ThreadID"]); }
Quand j'utilise ce code en application console je recois bien les informations désirées, mais la je ne recois rien.
Merci par avance de vos conseils.
Partager