Arreter l'exécutuion d'un thread [Résolu]

Taur33 85 Messages postés vendredi 24 septembre 2010Date d'inscription 20 mai 2011 Dernière intervention - 19 mai 2011 à 17:22 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 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.
Afficher la suite 

13 réponses

Répondre au sujet
Utilisateur anonyme - 20 mai 2011 à 10:33
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 mai 2011 à 10:53
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 mai 2011 à 17:37
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 19 mai 2011 à 19:18
0
Utile
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.
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 mai 2011 à 20:08
0
Utile
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
Commenter la réponse de ucfoutu
Utilisateur anonyme - 19 mai 2011 à 21:28
0
Utile
@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 ?
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 mai 2011 à 22:07
0
Utile
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
Commenter la réponse de ucfoutu
Utilisateur anonyme - 20 mai 2011 à 00:17
0
Utile
@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
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 mai 2011 à 06:52
0
Utile
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
Commenter la réponse de ucfoutu
Taur33 85 Messages postés vendredi 24 septembre 2010Date d'inscription 20 mai 2011 Dernière intervention - 20 mai 2011 à 12:06
0
Utile
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
Commenter la réponse de Taur33
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 mai 2011 à 13:26
0
Utile
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
Commenter la réponse de ucfoutu
Utilisateur anonyme - 20 mai 2011 à 13:54
0
Utile
@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.
Commenter la réponse de Utilisateur anonyme
Taur33 85 Messages postés vendredi 24 septembre 2010Date d'inscription 20 mai 2011 Dernière intervention - 20 mai 2011 à 17:21
0
Utile
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
Commenter la réponse de Taur33

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.