VB/VB.Net Fermeture du programme

A

Anonymous

Invité
#1
Bonjour les amis !
Alors voila quand je ferme mon programme ( bot ) la fenêtre du bot ce ferme mais le processus reste ( sans doute le theard des packet non ? ) encore je doit à chaque foit le kill ... ce que j'aimerais c'est que quand je ferme mon programme sa le ferme complètement quoi ! J'ai voulue kill le processus a partir du code a chaque foit mais comment détecter que la fenêtre principale ce ferme ? Pas trouver d’événement !

Une petite solution de votre part les amis ne seras pas de refus ! ( Hey j'en demande pas souvent :p )
 
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#2
Il est usuel de faire ça dans le OnClose de ta Form principale. C'est une méthode virtuelle.

Il faut notamment penser à se "désabonner" de tous les évènements pour que les objets puissent être détruits.

Autre possibilité (que je ne conseille pas), c'est de le faire dans le Program.vb, Après le Run.
 
A

Anonymous

Invité
#3
Je doit donc kill le processus ?

Meme les notify icon ne disparais pas il faut passer l'icon dessus pour qu'il disparais !
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#4
je pense si tu fait sa et kill t thread sa devai marcher

essaye comme sa :

Code:
    Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Ecoute_Jeu_thread.Abort()
        _socket_Jeu.Shutdown(SocketShutdown.Both)
        _socket_Jeu.Disconnect(1)
        couleur = Color.Blue
        Chat.Invoke(Chater, "[" & toto & "]" & "#####Connection au serveur fermé." & Chr(13))
        Me.Refresh()
    End Sub
ou sa
Code:
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Ecoute_Jeu_thread.Abort()
        _socket_Jeu.Shutdown(SocketShutdown.Both)
        _socket_Jeu.Disconnect(1)
        couleur = Color.Blue
        Chat.Invoke(Chater, "[" & toto & "]" & "#####Connection au serveur fermé." & Chr(13))
        Me.Refresh()
    End Sub
j'espère t'avoir aider.
 
Inscrit
19 Octobre 2010
Messages
214
Reactions
0
#5
La forme:
Mouais... envoyer des messages sur la fenêtre de chat à la fermeture, c'est pas vraiment une riche idée. Et encore moins le "refresh", là c'est une très mauvaise idée.

Sinon, on évite en général d'utiliser les évènements de la classe elle-même, car c'est inutilement lourd. C'est à cela que servent les methodes Overrides (override en C#).

Le fond:
Sur le fond, tu peux en effet faire comme suggère tifoux (en gros l'équivalent d'un "kill" sur le thread, accompagnée de l'arrêt de la connection). Cependant, avec Thread.Abort, tu provoques la génération immédiate d'une exception ThreadAbortException. Ainsi tu ne maîtrises rien dans la façon dont le thread se terminera : cela peut être par exemple au milieu de l'écriture dans un fichier.
Pour faire les choses proprement, il vaudrait mieux communiquer avec le thread pour lui signifier qu'il doit s'arrêter. Après, tout dépend si tu veux faire simple ou propre... :ugeek:
Il existe plusieurs façons de communiquer avec un thread. Le plus simple, c'est d'utiliser une variable (genre stopNow). Par contre, en C# il faut définir cette variable avec l'attribut volatile. En VB, il faut utiliser VolatileRead/VolatileWrite ou Synclock.
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#6
FastFrench chui d'accort avec toi mais je suis on va dire débutant donc je peut pas beaucoup l'aider sur la propreté encore moin la meilleur façon je donne mon idée ;) mais tu a raison.
 
A

Anonymous

Invité
#7
FF merci de tes infos toujour aussi utile !

Tifoux ravie que c'est toi qui ma aider :)
Voila ce que sa donne :p
Code:
       If FormUserPerso.Ecoute_Jeu_thread.IsAlive = True Then
                    FormUserPerso.Ecoute_Jeu_thread.Abort()
                    FormUserPerso._socket_Jeu.Shutdown(SocketShutdown.Both)
                    FormUserPerso._socket_Jeu.Disconnect(1)
                    Logs.CloseYouBot()
                    YouBot_icon.Dispose()
                    Application.Exit()
                Else
                    Logs.CloseYouBot()
                    YouBot_icon.Dispose()
                    Application.Exit()
                End If
Quand le theard et "Vivant" Sa marche nickel sa me ferme le programme et même l'iconne en bas a droite :=) le probleme et dans le else ... sa ne quite plus le programme heyhey :p
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#8
Si tu remets le code du Vivant sa fonctionne pas??
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#9
J'ai pas essayé, mais avec la fonction "End" ?
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
End
End Sub
 
A

Anonymous

Invité
#10
Sa change rien :p un IF et un IF >< => Tifoux

Je pense que sa viens de
Code:
     If FormUserPerso.Ecoute_Jeu_thread.IsAlive = True Then
 
A

Anonymous

Invité
#11
Le END marche mais si je mais le IF sa marche plus =/

Edit: Résolue un simple END suffisait Hum ... ce cache :p
 
Haut Bas