Bonjour,
Je débute en programmation mutithread dans l'environnement .Net.
J'écris une application qui doit traiter en parallèle des queues de messages différents.
Afin de suivre la progression de chaque queue je crée autant de TabPage dans l'interface que je n'ai de thread.
Mes threads envoient régulièrement des Event qui sont récupérés par les TabPages.
Ça fonctionne assez bien mais j'ai tout de mêmes de temps à autres des incohérences, voir des deadlocks qui se produisent.
Jusqu'à présent j'ai pu les résoudre mais plus par intuition que par réelle connaissance du problème.
J'utilise log4net pour créer des logs avec un RollingFileAppender et un ConsoleAppender.
De plus j'ai redirigé ma console vers différentes TextBox qui filtrent le log et ne l'affiche que dans la Textbox concernant le Thread qui écris du log
En simple :
2 thread : "Process 1" et "Process 2"
2 TextBox = "tb_proc1" et "tb_proc2"
quand l'écris
tb_proc1 affiche : Process 1 : hello wolrd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 myLogger.Debug("Process 1 : hello wolrd"); myLogger.Debug("Process 2 : hello wolrd");
tb_proc2 affiche : Process 2 : hello wolrd
Ce qui se passe évidemment c'est que j'ai donc un accès concurrent au thread d'affichage. Chaque process effectue des Invoke pour appeler le thread d'affichage et le faire modifier.
C'est là que je ne suis pas certain que ma méthode soit la meilleure.
Est-ce qu'il faut que je travaille en synchrone ou non ?
Y-a-t une différence entre ces 2 lignes de code ? :
Je ne peux pas vraiment produire un code simplifié qui produise les soucis que je rencontre car il faudrait pour ça que je cerne bien le problème ce qui n'est pas le cas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 object[] args = { param1, param2 }; // méthode 1 IAsyncResult ar = myTextBox.BeginInvoke(new MyDelegate(MyMethod), args); EndInvoke(ar); // méthode 2 myTextbox.Invoke(new MyDelegate(MyMethod), args);
En espérant trouver un peu de lumière :-)
Ghurdyl
Partager