Bug a cause d'une boucle [Résolu]

Messages postés
4
Date d'inscription
mardi 30 mai 2006
Dernière intervention
26 juillet 2008
- - Dernière réponse : NHenry
Messages postés
14325
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
18 décembre 2018
- 19 mars 2008 à 10:39
Bonjour voila mon probleme : dans mon programme il y a une boucle qui génere un bug de type pas de reponse lors de l'exécution , je suis au desespoir j'ai essayé avec différents types de boucles ainsi qu'avec différentes commandes plus classique pour fermer le processus .
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Do While CheckBox1.Checked
            Sleep(3000)
            Try
                Shell("TSKILL vlc", vbHide)
            Catch
            End Try
           
        Loop
    End Sub
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut,
ajoute application.doevents sous ton sleep
Q : [doc/faq.aspx#vb_doevents Code : Mon application freeze lors d'une
longue opération, comment y rémedier]

celà dit c'est pas propre.... travailler jusqu'à ce que ton utilisateur décoche.....

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
14325
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
18 décembre 2018
3
Merci
Bonjour

Pour le thread, voir un BackGoundSWorker (controle) ou la classe Thread (System.Threading.Thread). Pour les infos complémentaires (Aide sur ces 2 options), voir MSDN, tout y est.

Pour utiliser Ctrl+Alt, il faut shunter les procédures habituelles (pas d'interception, mais j'ai un doute concernant KeyDown et KeyUp, il faudras mettre KeyPreview (de la form) à True et intercepter les events KeyDown et KeyUp) mais là si il faut passer par les APIs ou hooking, ça sort de mes comptétences (avec .NET, on n,'a pratiquement plus besoin des APIs).

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 105 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
Messages postés
14325
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
18 décembre 2018
0
Merci
Bonjour

Tu es en .NET.

Ton code :
        Do While CheckBox1.Checked
            Sleep(3000)
            Try
                Shell("TSKILL vlc", vbHide)
            Catch
            End Try          
        Loop

Ton code freeze ton app car tant que CheckBox1 (évite les noms par défaut) est coché, tu fais une pause de 3 secondes (donc, pas de possibilité de changer l'état de CheckBox1 et bloque ton app pendant 3 secondes), puis killer VLC (préfère voir du coté de System.Diagnostics.Process pour gérer les process).

Dans ton cas, soit un Timer (3 secondes c'est long) ou un thread (pour gérer plusieurs nettoyages) seront plutot conseillés.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
Commenter la réponse de NHenry
Messages postés
4
Date d'inscription
mardi 30 mai 2006
Dernière intervention
26 juillet 2008
0
Merci
Merci beaucoup pour votre rapidité ! pour information mon code n'est pas propre car j'ai tester un maximum de solution avant de me resigner a essayer le dos ...De plus sans mettre de pause le bug apparaissait quand meme, il est dû a la boucle .
Ceci dit j'aimerai plus d'information sur le thread afin de remplacer cette vilaine pause ainsi que des informations sur une boucle qui exécute le code jusqu'a ce que l'utilisateur appui sur une touche.
voici mon nouveau code :
  Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Sub KillProcessus(ByVal vlc As String)
        Dim p() As Process
        Dim r As Process
        p = Process.GetProcessesByName("vlc")
        For Each r In p
            r.CloseMainWindow()
            r.Kill()
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Do While CheckBox1.Checked
            Sleep(3000)
            Application.DoEvents()
            Try
                KillProcessus("vlc")
            Catch
            End Try
        Loop
    End Sub
Commenter la réponse de cerbere53
Messages postés
4
Date d'inscription
mardi 30 mai 2006
Dernière intervention
26 juillet 2008
0
Merci
Voila pour remplacer la textbox j'aimerai mettre un bouton avec un raccourci clavier afin que quand l'utilisateur tape ctrl alt a la boucle s'arrete mais je n'ai pas trouver comment faire quelqu'un pourrait il m'éclairer ?
Commenter la réponse de cerbere53

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.