Boucle While sans perdre la main

Résolu
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 - 22 août 2011 à 14:56
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 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

6 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
22 août 2011 à 16:56
Salut,

le multi thread devrait t'aider !

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

Merci beaucoup :)
0

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

Posez votre question
Jeromedu79 Messages postés 119 Date d'inscription dimanche 9 janvier 2011 Statut Membre Dernière intervention 23 décembre 2012 1
23 août 2011 à 18:30
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
24 août 2011 à 20:50
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.
0
Rejoignez-nous