Boucle While sans perdre la main [Résolu]

Signaler
Messages postés
120
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
23 décembre 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

6 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

le multi thread devrait t'aider !

A+
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
120
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
23 décembre 2012
1
Merci, je viens de trouver une source sur le multi thread.
Messages postés
120
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
23 décembre 2012
1
C'est bien ce que j'attendais comme résultat.
C'est simple à utilisé et utile pour diverse applications.

Merci beaucoup :)
Messages postés
120
Date d'inscription
dimanche 9 janvier 2011
Statut
Membre
Dernière intervention
23 décembre 2012
1
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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.