Arreter l'exécutuion d'un thread

Résolu
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011 - 19 mai 2011 à 17:22
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 20 mai 2011 à 17:37
Bonsoir à tous
Voila mon probleme : j'ai un userform avec un bouton pour le minimized
Quand je place la souris (je dis bien je place pas je click)sur mon bouton minimized je change son backgroundimage en "préssé" j'attends 1 seconde et mon user form se minimize
Voici mon code qui je pense est bon :
 Private Sub btnMin_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnMin.MouseHover
' On change en "pressé"
        BtnMin.BackgroundImageLayout = ImageLayout.Zoom
        BtnMin.BackgroundImage = My.Resources.btnminhover
        Me.Refresh()
        Thread.Sleep(1000) 'on attend 1 sec avant de minimizer
        Me.WindowState = FormWindowState.Minimized
    End Sub


Cependant si je déplace la souris(cad je quitte mon btnMin)avant 1 seconde comment
empecher l'exécution de:
Me.WindowState = FormWindowState.Minimized
J'imagine que l'on doit faire quelque chose sur le thread en cours dans l'évènement
btnMin_MouseLeave mais je ne vois pas comment procéder.
Merci de m'aider svp.

13 réponses

Utilisateur anonyme
20 mai 2011 à 10:33
Salut ucfoutu,
Je ne veut pas abuser de ton temps mais je voudrais quand même bien comprendre. Pour cela j'ai fais ce code :
Public Class Form1
    Dim maDate As New Date

    Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
        maDate = Now
    End Sub

    Private Sub Button1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseMove
        If Now.Subtract(maDate).Seconds >= 1 Then
            Me.WindowState = FormWindowState.Minimized
        End If
    End Sub
End Class

Si j'arrête ma souris sur le bouton, rien ne se passe. Et je ne vois pas quel autre événement pourra mettre à jour MaDate.
Donc le temps de minimisation du formulaire est complètement aléatoire passé une seconde. Il dépendra de la réaction de l'utilisateur et ne fera jamais une seconde exactement.
Merci d'avance de ta réponse.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2011 à 10:53
que vient faire ici ton évènement mouse_enter ?
et tu nous as bien dit :
je dis bien je place pas je click

Seul l'évènement Move est à exploiter, au move (donc en survol):
Algo en français :
si madate 0>> madate = maintenant et je ne fais rien
sinon :
- si maintenant - madate >1 seconde>> minimiser et remettre madate à 0

Et, quand la souris n'est plus sur le bouton :
remettre madate = 0

Ton souci serait que l'utilisateur commence à "survoler" et s'arrête en réussissant à rester parfaitement immobile (et le tout pendant une seconde) ?
Et alors ? il ne se passerait pendant son arrêt rien d'autre que s'il n'avait pas commencé à survoler. Mais dès qu'il bougerait à nouveau (et il faudra bien qu'il le fasse pour continuer), l'évènement Move constaterait que maintenant - madate >0 et>> minimiserait.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2011 à 17:37
erreur de ma part.
Je voulais dire TimeSpan
Va lire cette discussion (elle devrait t'être utile)
http://www.csharpfr.com/forum/sujet-USAGE-TIMESTAMP_1120156.aspx

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
Utilisateur anonyme
19 mai 2011 à 19:18
Bonsoir,
Dommage de bloquer ton application avec un Sleep.
Pourquoi ne pas utiliser un simple timer avec sa propriété Enabled à True dans l'événement Enter de ton contrôle et à False pour Leave ?
Bonne nuit.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mai 2011 à 20:08
Bonjour,
un timer serait ici un peu comme utiliser une pelle de chantier juste pour planter une giroflée ...
Il suffit d'une variable générale, mise à l'heure en cours en cours au survol du bouton (mais uniquement si = 0) et à 0 en le quittant.
Puis, toujours au déplacement (survol) du bouton, dire qu'on exécute l'action (minimiser) que si que si l'heure actuelle dépasse de 1 seconde celle de la variable.
Voilà un mécanisme simple et peu coûteux .
A toi de jouer


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Utilisateur anonyme
19 mai 2011 à 21:28
@ucfoutu
Je n'ai surement pas bien compris ton système.
Avec ta solution, si je stoppe ma souris sur le bouton avant que la seconde soit écoulée et que je ne la bouge plus que se passera t-il après la seconde ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mai 2011 à 22:07
puis-je te répondre, banana52, que :
- il faudrait être un as de la maitrise gestuelle pour y parvenir, surtout dans ce laps de temps
- celui qui, as en cette maitrise, y parviendrait, ne gagnerait rien d'autre que de continuer à "admirer" ce qui n'est pas encore réduit et c'est tout car, à moins d'en rester là, béatement, la réduction interviendrait inévitablement dès qu'il se déciderait à sortir de sa "torpeur" volontaire (s'il à réussi à générer cette "torpeur").
CQFD


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Utilisateur anonyme
20 mai 2011 à 00:17
@ucfoutu
Il n'y a rien d'exceptionnel à arrêter une souris sur un bouton avant 1 seconde et ensuite comment vient-on lire cette variable pour déclencher la minimisation du formulaire sans événement ? J'avoue que je ne comprends toujours pas
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2011 à 06:52
et ensuite comment vient-on lire cette variable pour déclencher la minimisation du formulaire sans événement ? J'avoue que je ne comprends toujours pas


cette variable (relis) garde sa valeur tant que la souris est sur le bouton !
__Il suffit d'une variable générale, mise à l'heure en cours en cours au survol du bouton (mais [quote]uniquement si = 0
) et
à 0 en le quittant
_/quote
que ne comprends-tu donc pas ?
_________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 12:06
Bonjour excusez de pas avoir répondu hier je me suis endormi
Pourquoi ne pas utiliser un simple timer avec sa propriété Enabled à True dans l'événement Enter de ton contrôle et à False pour Leave ?

Effectivement banana32 ,c'est ce que j'avais fait avant, mais meme un débutant comme moi maitrise le timer tandis que thread.sleep est peu utilisé et les propriétés associées à thread peu connues puis ca evite l'utilisation d'1 timer

En fait, ucfoutu c'est moi qui est posée la question et le code que banana donne fonctionne cependant il faut déplacer la souris lentement sur le bouton si on survole rapidement le bouton la fenetre se minimized(j'ai essayé mais avec mousehover et mouseleave)
Tu dis qu'il faut mettre madate à zéro hors on peut pas convertir une date en Integer
Cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2011 à 13:26
Où diable ai-je dit de typer madate en integer ?
Pense à la typer en ce qu'est le type d'un DateTime, tout naturellement
Et intéresse-toi, pendant que tu y es (il ne faut pas rater ce genre d'occasion) à ce à quoi sert l'utilisation de timestamp


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Utilisateur anonyme
20 mai 2011 à 13:54
@ucfoutu
Merci de ta réponse à ma question.
Conclusion : Ton système ne garantit pas une minimisation au bout d'une seconde mais dépend uniquement d'un mouvement de souris qui peut avoir lieu bien plus tard.
Ceci ne gênera peut être pas Taur33 dans son projet après tout.
A bientôt à tous les deux.
0
Taur33 Messages postés 85 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 17:21
En fait je vais utiliser le timer c'est beaucoup plus simple et ca l'avantage de fonctionner
Je serais jamais comment arreter un thread en cours
Merci de votre aide banana32 et ucfoutu
Avant de valider vos réponses tu peux m'en dire plus sur timestamp ucfoutu
cordialement
0
Rejoignez-nous