Chrisly74
Messages postés23Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention11 mai 2006
-
26 avril 2006 à 16:03
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 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
Chrisly74
Messages postés23Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention11 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
Chrisly74
Messages postés23Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention11 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)
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 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.
Chrisly74
Messages postés23Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention11 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
Chrisly74
Messages postés23Date d'inscriptionlundi 10 avril 2006StatutMembreDernière intervention11 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