Bug a cause d'une boucle

Résolu
cerbere53 Messages postés 4 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 26 juillet 2008 - 17 mars 2008 à 21:41
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 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

5 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 mars 2008 à 07:50
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
19 mars 2008 à 10:39
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
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 mars 2008 à 08:55
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
0
cerbere53 Messages postés 4 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 26 juillet 2008
18 mars 2008 à 18:44
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
0

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

Posez votre question
cerbere53 Messages postés 4 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 26 juillet 2008
18 mars 2008 à 21:29
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 ?
0
Rejoignez-nous