Probleme lors de la reouverture de mon programme

Résolu
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006 - 26 avril 2006 à 16:03
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 - 28 avril 2006 à 09:35
bonjour
j'ai un probleme je n'arrive pas a réouvrir mon programme lorsque je le ferme une premiere fois et que j'essai de le réouvrir ça ne fonctionne pas

voici mon codage:
Dim Etat As Integer = Connect

Public Sub Gemma()

Do
Select Case Etat

Case Connect
connecte() 'appel de la fonction connecte
Dim networkStream As NetworkStream = MonClient.GetStream()
If NetworkStream.CanWrite And NetworkStream.CanRead Then
Etat = Send
Else
If BoutonConnect = False Then
Etat = Close
End If
End If

Case Send
envoie() 'appel de la fonction envoie

Case Receive
reçoie() 'appel de la fonction reçoie
Dim networkStream As NetworkStream = MonClient.GetStream()
If (Not NetworkStream.CanRead) Then
Etat = Close
Else
If (BoutonConnect False And BitSync False) Then
NetworkStream.Close()
Etat = Close
Else
If (BoutonConnect True And BitSync False) Then
Etat = Send
End If
End If
End If


Case Close
deconnecte() 'appel de la fonction déconnecte
If BoutonConnect = True Then
Etat = Connect
End If

End Select
MyThread.Sleep(20)
Loop

End Sub

Public Sub connecte()
MonClient.Connect("192.168.1.31", 5010)
estConnecté = True
BoutonConnect = True
End Sub

Public Sub deconnecte()
MonClient.Close()
estConnecté = False
End Sub

Merci pour votre aide

13 réponses

OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 avril 2006 à 09:28
A la fin de la procédure qui envoie au reçoit des données avec TcpClient écrit ceci :

MonClient = New TcpClient ' Réinitialise MonClient

je pense que ça devrait marcher.

Redman
3
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
26 avril 2006 à 16:08
Précision

cette partie de programme tourne dans un thread
et MonClient est déclarer dans la fonction principale donc je pense que ça doit etre par la que vient mon erreur.

fonction principale:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
unClient = New MonTcpClient 'appel d'une fonction MonTcpClient
myThread = New System.Threading.Thread(AddressOf unClient.Gemma)
myThread.Start()
End Sub

merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
26 avril 2006 à 19:12
il n'est pas nécessaire de poster 2 fois la même question, tu n'auras pas plus de réponses.
--> http://www.vbfrance.com/infomsg/PROBLEME-LORS-REOUVERTURE-MON-PROGRAMME-0_725076.aspx[COMPONENT-SIZERONE-1_725070.aspx ]
Faut juste de la patience, et laisser le temps aux experts de venir lire ta question, ils ne font pas que ça toute la journée.

As-tu pensé à tuer correctement tes différents threads avant de fermé ton programme.
Si tes threads ne sont pas arretés, tu peux avoir l'impression que ton programme est arreté, mais seul le code principal est arreté, tes threads tournent toujours donc ton programme reste en mémoire.

0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
27 avril 2006 à 01:13
C'est impossible soit ca serait plutôt le thread ! A moins que tu es mis d'autre code qui empêche le bon fonctionnement du programme !

Redman
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
27 avril 2006 à 08:33
bonjour
le probleme est que ma partie de programme "Gemma" a besoin de tourner dans le thread donc je ne peut pas l'arreter
j'ai l'impression que c'est la fonction close qui ne fonctionne pas
je vous met le message que j'obtiend lorsque j'essai de me reconnecter:
"Une exception non gérée du type 'System.ObjectDisposedException' s'est produite dans system.dll
Informations supplémentaires : Impossible d'accéder à un objet supprimé nommé "System.Net.Sockets.TcpClient".

ce message s'affiche sur la ligne
MonClient.Connect("192.168.1.31", 5010)

merci
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
27 avril 2006 à 13:01
Alors je vois pourquoi ! Et j'ai établi code SAFE pour ce genre de problème. Ton code Gemma peut utiliser beaucoup de mémoire j'imagine, donc lorsque la fenêtre principale se ferme tu dois insérer le code qui arrête le process le process doit être déclarer Public.

Par exemple tu apelles ton thread tGemma et tu le déclare Public(en haut du gestionnaire évènement) de ta form principale : Public tGemma as new threading.thread(AddressOf GemmaProc).

* Ce qui est en italique tu peux le changer

Dis moi si on peut réutilisé le tGemma lusieurs fois dans ton programme ? Car là ca change tout et le code serait un peu différent.

Redman
0
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
27 avril 2006 à 17:08
je ne comprend pas ton explication OneHacker peut tu etre plus precis
je suis desolé mais je debute en vb.net
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
27 avril 2006 à 18:22
Je reprends ! Est-ce que tu utilises la fonction myThread.Start plusieurs fois dans le programme ?

je disais sinon que tu dois déclarer myThread Public ! ex: Public myThread as New Threading.Thread.

Redman
0
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
28 avril 2006 à 07:57
non j'utilise qu'une seule fois myThread.start
Public myThread As System.Threading.Thread
et le probleme c'est que myThread est public donc je ne sais pas trop comment faire
merci
0
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
28 avril 2006 à 09:03
je pense avoir trouvé d'ou venait le probleme mais je ne sais pas comment le resoudre
avant le code de dessus j'ai les declarations suivantes

"Dim MonClient As New TcpClient"

lorsque mon programme demarre pour la premiere fois ça crée un nouveau TcpClient
donc je peut l'ouvrir et le fermer mais comme ça ne repasse pas sur cette ligne pour reouvrir un nouveau TcpClient, ça essaye d'ouvrir l'ancien.
je pense que ça vient de la
si vous pouvez m'aider ça serai gentil
merci d'avance
0
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
28 avril 2006 à 09:31
merci beaucoup pour ton aide
0
Chrisly74 Messages postés 23 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 11 mai 2006
28 avril 2006 à 09:31
merci beaucoup pour ton aide
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 avril 2006 à 09:35
Derien !

Redman
0
Rejoignez-nous