C# : Freeze d'une fenetre messenger avec un serveur de socket

airforce92 Messages postés 1 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 3 juin 2005 - 3 juin 2005 à 15:48
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 3 juin 2005 à 16:02
Bonjour,

J'essaye de créer un un client "MSN" avec l'aide
- d un serveur de socket "TcpListener
server =
new TcpListener(localAddr,port)"
- de classe graphique permettant de faire des fenetres messenger provenant de http://www.codeproject.com/cs/miscctrl/taskbarnotifier.asp (l'exemple marche tres bien)

Je lance mon serveur de socket dans un Thread, a part, pour qu'il gère les appels réseaux et appel les methodes d'affichage des fenetres messenger. Lors de la reception d'un message réseau , l'appel a l'affichage d'une fenetre messenger freeze. Alors que si j'appel la methode d'affichage d'une fenetre messenger dans le Main(), tout se passe bien. Ci dessous mon code sur le Main.



static
void Main()


{



//Starting socket server


Int32 port=13000;


SocketServer server=SocketServer.GetInstance(port);


Thread serverThread =
new Thread(
new ThreadStart(server.Run));


serverThread.Name="Socket";


serverThread.Start();


Application.Run();


}

Il semblerait que je ne soit pas le seul qui ai rencontré ce probleme: http://forums.belution.com/en/csharp/000/006/60.shtml

Si un dieu du graphisme et des sockets peut me repondre pourquoi et comment contourner ce freeze .
Merci d'avance de vos réponses,

1 réponse

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
3 juin 2005 à 16:02
moi j'ai géré ça différemment...

en gros :
- 1 Thread qui écoute le réseau
Quand tu réceptionnes un message tu déclenches un évènement dans ta form
- 2 Tu interceptes l'évènement et tu stockes ton message dans une pile (ArrayList)
- 3 Dans le formulaire, place un Timer qui scrute la pile et affiche les messages quand ils existent.

N'oublie pas de mettre un lock lorsque tu accèdes à la pile.

Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
</FO< body>
Rejoignez-nous