Boucle While sans perdre la main [Résolu]

Jeromedu79 120 Messages postés dimanche 9 janvier 2011Date d'inscription 23 décembre 2012 Dernière intervention - 22 août 2011 à 14:56 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 24 août 2011 à 20:50
Bonjour,

Depuis 2 jours, je cherche à exécuté une boucle while sans perdre la main.

Je m'explique :

Voici mon code

Public Class boucle

    Public Shared Touche As Boolean = False

    Public Shared Sub boucler(ByVal objet As Panel)

        While Touche = False
' partie du code qui s’exécute tant que Touche n'est pas à True
        End While

    End Sub

End Class


Mais voila, pendant que cette boucle tourne, je voudrais avoir la main sur ma form,
plus précisément, pouvoir exécute une partie de mon code qui est un déplacement d'un panel grâce au touche "ZQSD" :

#Region "Déplacement"

    Private Sub Touche(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyClass.KeyDown

        If e.KeyCode = Keys.Z Then
            Select Case Y2
                Case True
                    XLeft2 = XLeft2 - 2
                    XLeft1 = XLeft2
                    Panel1.Location = New Point(Panel1.Location.X, XLeft2)
                Case False
                    XLeft2 = Panel1.Location.Y - 2
                    XLeft1 = XLeft2

                    Panel1.Location = New Point(Panel1.Location.X, XLeft2)
                    Y2 = True
            End Select
        End If


        If e.KeyCode = Keys.S Then
            Select Case Y1
                Case True
                    XLeft1 = XLeft1 + 2
                    XLeft2 = XLeft1
                    Panel1.Location = New Point(Panel1.Location.X, XLeft1)
                Case False
                    XLeft1 = Panel1.Location.Y + 2
                    XLeft2 = XLeft1
                    Panel1.Location = New Point(Panel1.Location.X, XLeft1)
                    Y1 = True
            End Select
        End If


        If e.KeyCode = Keys.D Then
            Select Case X1

                Case True
                    Xright1 = Xright1 + 2
                    Xright2 = Xright1
                    Panel1.Location = New Point(Xright1, Panel1.Location.Y)

                Case False
                    Xright1 = Panel1.Location.X + 2
                    Xright2 = Xright1
                    Panel1.Location = New Point(Xright1, Panel1.Location.Y)
                    X1 = True
            End Select
        End If


        If e.KeyCode = Keys.Q Then
            Select Case X2

                Case True
                    Xright2 = Xright2 - 2
                    Xright1 = Xright2
                    Panel1.Location = New Point(Xright2, Panel1.Location.Y)

                Case False
                    Xright2 = Panel1.Location.X - 2
                    Xright1 = Xright2
                    Panel1.Location = New Point(Xright2, Panel1.Location.Y)
                    X2 = True

            End Select
        End If

    End Sub

#End Region


Merci.

Jérôme - Schrödinger
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 22 août 2011 à 16:56
3
Merci
Salut,

le multi thread devrait t'aider !

A+

Merci bigfish_le vrai 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 22 août 2011 à 22:20
3
Merci
Salut

Sinon, pour les petites boucles, il te suffit de rendre la main au système à l'intérieur de ta boucle :
Application.DoEvents

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_Jack
Jeromedu79 120 Messages postés dimanche 9 janvier 2011Date d'inscription 23 décembre 2012 Dernière intervention - 22 août 2011 à 17:09
0
Merci
Merci, je viens de trouver une source sur le multi thread.
Commenter la réponse de Jeromedu79
Jeromedu79 120 Messages postés dimanche 9 janvier 2011Date d'inscription 23 décembre 2012 Dernière intervention - 22 août 2011 à 17:23
0
Merci
C'est bien ce que j'attendais comme résultat.
C'est simple à utilisé et utile pour diverse applications.

Merci beaucoup :)
Commenter la réponse de Jeromedu79
Jeromedu79 120 Messages postés dimanche 9 janvier 2011Date d'inscription 23 décembre 2012 Dernière intervention - 23 août 2011 à 18:30
0
Merci
Bonjour,

Merci pour votre réponse Jack.

Lorsque je lançais la compilation de mon code et qu'il arrivait à la boucle While (lancé dans un thread), une erreur survenait :

"Opération inter-threads non valide : le contrôle 'Monstre' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

J'ai donc essayé avec votre solution et cela fonctionne très bien.

Le multi thread qui ma été proposé par bigfish me servira dans quelque chose d'autre surement

Merci beaucoup à vous deux
Commenter la réponse de Jeromedu79
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 24 août 2011 à 20:50
0
Merci
D'après ce que j'ai compris des threads, leur programme ne peut pas avoir accès aux objets du projet.
C'est un peu comme se comporte une fonction dans une DLL.
Commenter la réponse de cs_Jack

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.