Bonjour,
j'ai un petit soucis, je suis en train de développer une petite appli à base de Thread, de TCPClient, de NetworkStream, de TCPListener et de Socket.
Lorsque je ferme mon application je tue bien tous mes Threads via la methode Abort(). Je ferme mon TCPClient, mon NetworkStream mon TCPListener, mon TCPClient et mon socket... mais j'ai quelques exceptions:
*******************************************
Thread d'affichage des messages:
"La reference d'objet n'est pas définie à une instance d'un objet."
Je tue ce thread de la manière suivante:
this.ThreadMessage.Abort();
stop=true;
Voici le Thread en question:
private void AfficheMessage()
{
try{
while(!stop)
{
string message=decode_message(ReceivedString());
if(message!="!VIDE")
this.Invoke(new invokeAfficheMessage(invokeAfficheMessageText),message);
Thread.Sleep(100);
}
}catch(Exception ex)
{
MessageBox.Show(ex.Message,"DiscussionForm : AfficheMessage");
}
}
*******************************************
Thread d'ecoute des messages venant du serveur:
"Impossible de lire les données de la connexion de transport: Une opération de blocage a été interrompue par un appel WSACancelBlockingCall"
Je tue ce thread de la manière suivante:
socketClient.Close();
nsClient.Close();
threadClient.Abort();
Voici le Thread en question:
private void EcouteServeur()
{
try
{
nsClient = socketClient.GetStream();
while(socketClient.Connected)
{
Byte[] buffer = new Byte[2048];
int size = nsClient.Read(buffer,0,buffer.Length);
string commande = System.Text.Encoding.ASCII.GetString(buffer, 0, size);
Pile_Message.Enqueue(commande);
}
}catch(Exception ex)
{
MessageBox.Show(ex.Message,"Client : EcouteServeur");
}
}
*******************************************
Thread d'ecoute des messages venant du client:
"Une connexion établie a été abandonnée par un logiciel de votre ordinateur hôte".
Je tue ce thread de la manière suivante:
socketServeur.Close();
threadMessage.Abort();
Voici le Thread en question:
private void EcouteMessage()
{
try{
while(socketServeur.Connected)
{
Byte[] buffer = new Byte[2048];
int size = socketServeur.Receive(buffer);
string commande = System.Text.Encoding.ASCII.GetString(buffer, 0, size);
Pile_Message.Enqueue(commande);
}
}catch(Exception ex)
{
MessageBox.Show(ex.Message,"Serveur : EcouteMessage");
}
}
*******************************************
Thread d'ecoute des connexions Client:
"Le thread a été abandonné"
Je tue ce Thread de la manière suivante:
void MainFormFormClosed(object sender, FormClosedEventArgs e)
{
myListener.Stop();
stop=true;
ThreadEcouteConnexion.Abort();
Application.Exit();
}
Voici le Thread associé:
private void EcouteConnexionClient()
{
try{
myListener = new TcpListener(myPort);
myListener.Start();
while(!stop)
{
socketServeur = myListener.AcceptSocket();
connexion_en_mode_Serveur CMS=new connexion_en_mode_Serveur(socketServeur);
while(CMS.Etat=="PROTOCOLE_CONNEXION" && !stop)
Thread.Sleep(100);
if(CMS.Etat=="DISCUSSION")
{
df=new DiscussionForm(AlwaysOnTop,CMS);
df.ShowDialog();
}
}
}catch(Exception ex)
{
MessageBox.Show(ex.Message,"MainForm : EcouteConnexionClient");
}
}
Du coup quand je ferme mon appli il reste une instance qui tourne dans le gestionnaire de taches...


J'espère que l'un d'entre vous aura le courage de lire ce post inbitable...
Sinon est-ce que quelqu'un sait comment copier coller son message en gardant les couleurs syntaxes du C#? j'ai vu certains posts plus lisible que le mien...
Merci d'avance aux courageux.
A+
*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!