Multithread, bonne façon de faire
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
Code:
1 2
| myLogger.Debug("Process 1 : hello wolrd");
myLogger.Debug("Process 2 : hello wolrd"); |
tb_proc1 affiche : Process 1 : 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 ? :
Code:
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); |
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 ...
En espérant trouver un peu de lumière :-)
Ghurdyl