IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Exécuter simultanément deux évènements


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut Exécuter simultanément deux évènements
    Bonjour Forum
    Bonjour tout le monde
    Svp mes chers .. si vous pouvez m'aider a resoudre ce probleme
    Avec ce code pour faire animer dans un panel dans MDIParent1 un text deja stockè dans ma Table1.
    J'ai mis dans Module1 ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        Public Sub Animate_Text()
            Try
                Dim da As New OleDbDataAdapter("Select * from Table1 order by Id", Conne)
                Dim dt As New DataTable
                da.Fill(dt)
                MDIParent1.Label1.Left = 0 - MDIParent1.Label1.Width
                If dt.Rows.Count > 0 Then
                    For r As Integer = 1 To dt.Columns.Count - 1
                        MDIParent1.Label1.Text &= "  " & (dt(0)(r).ToString)
                    Next
                    MDIParent1.Timer1.Start()
                End If
                Conne.Close()
            Catch ex As Exception
                MsgBox(ex.Message(), MsgBoxStyle.Critical, "Erreur inattendu")
            End Try
        End Sub
    Dans MDIParent1 Load ..
    Puis toujours dans MDIParent1 .. j'ai mis ce Timer1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            If Label1.Left >= Me.Panel1.Width Then Label1.Left = 0 - Label1.Width
            Label1.Left += 5
        End Sub
    Le code fonctionne d'une facon excellente sans aucune erreur .
    Mon probleme .. lorsque je click sur autre Button pour executer autre evenement .. le text s'arretera jusqu'à la fin de la procédure .. et apres le text fonctionne
    Comment faire svp pour executer et clicker sur n'importe quel Button sans aucun effet sur le text animé.
    Merci beaucoup d'avance pour l'aide
    Amicalement
    MADA

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Mada,

    Je ne comprends pas bien ton problème.

    J'ai fait le test suivant :

    J'initialise le Timer.Interval à 100 (c-à-d 10 Tick par seconde) et à chauqe Tick, je change la couleur de fond d'un TextBox. A l’exécution, j'observe que je peux faire d'autres tâches, dont celles commandées par un bouton, et que pendant leur exécution, le TextBox n'arrête pas de clignoter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            TestTimer.Interval = 100
            TestTimer.Start()
    ' ... ... ...
     
        Private Sub TestTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles TestTimer.Tick
            Static Sw As Integer
            If Sw = 0 Then
                TextBox7.BackColor = Color.Blue
                Sw = 1
            Else
                TextBox7.BackColor = Color.Red
                Sw = 0
            End If
        End Sub
    ....

  3. #3
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut
    Bonsoir Phil Rob
    Ravi de vous rencontrer dans ce sujet Sir
    Voila .. dans MDIParent1 j'ai plusieurs Buttons .. par exemple un Button pour faire Backup a ma base de donnees
    Losque je click sur Button1 pour faire Backup alors le texte animé qui est aussi dans un panel dans MDIParent1 s'arretera de bouger jusqu'a la fin de backup apres bouge d'une facon normale
    J'ai essaye de faire ( Thread ) .. comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim Deroulante As New System.Threading.Thread(AddressOf MyBackgroundThread)
        Private Sub MyBackgroundThread()
            While True
                If Label1.Left >= Me.Panel1.Width Then Label1.Left = 0 - Label1.Width
                Label1.Left += 1
                Threading.Thread.Sleep(10)
            End While
        End Sub
    Puis dans MDIParent1 Load j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CheckForIllegalCrossThreadCalls = False
            Call Animate_Text()
            Deroulante.Start()
    Ca fonctionne tres bien mais lorsque je quitte MDIParent1 .. avec (Me.Dispose) j'aurai un message d'erreur ici :
    Additional information: Impossible d'accéder à un objet supprimé.
    Merci beaucoup maitre pour l'aide
    Amicalement
    MADA

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Je te propose d'essayer mon code (je ne vois pas pourquoi ton animation devrait s'arrêter) :
    1. Initier le Timer.Interval avec une valeur raisonnable (pas trop petite, 100 est déjà assez petit)
    2. Démarrer le Timer au moment où tu souhaites commencer l'animation
    3. Programmer l'animation sous l'évènement Click du Timer, sans oublier la variable Static si tu veux alterner les modifications.

    Note que je ne comprends pas trop ton algo, ne peux-tu envoyer des copies d'écrans (j'aurai sans doute un peu de temps demain) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Static Sw As Integer
            If Sw = 0 Then
     
            If Label1.Left >= Me.Panel1.Width Then Label1.Left = 0 - Label1.Width
            Label1.Left += 5
     
               ' code ...
                Sw = 1
            Else
                ' code ....
                Sw = 0
            End If
        End Sub
    Bonne nuit,

  5. #5
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut
    Merci beaucoup Phil Rob
    Mes excuses vraiment j'ai pas pu adapter votre code a la mienne
    Lorsqu'on click sur n'importe quel Button pour executer un petit code comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            MsgBox("Bonjour")
        End Sub
    Avec ce code on ne sent la pause du texte animé .. mais en realite avec un code un peu long .. comme le code pour faire Backup .. et surtout .. surtout lorsque j'execute un code d'impression crystel report ..on sent que le texte animé a fait une pause jusqu'a l'ouverture du page de crystal .
    Mes excuses .. je vais poster ce petit projet pour mieu me comprendre .. sachant que je suis oblige de mettre le ( Public Sub Texte_Panel_Animation() ) dans un Module1
    Bonne nuit ..
    Amicalement
    MADA
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    quand ton code s'exécute cela bloque le rafraichissement de l'interface, car c'est le même thread qui est utilisé pour ça
    ca attend donc que tu sortes de button.click pour rafraichir
    c'est pour ca que quand on a quelque chose qui dure potentiellement plus de quelques centaines de millisecondes on le fait sur un autre thread

    regarder le backgroundworker ou async/await
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Si je teste ton exemple (MsgBox) avec le TextBox, on ne sort pas du code du bouton tant qu'on a pas cliqué le <OK> du MessageBox, mais l'animation ne s'arrête pas !
    D'autre part, Pol63 a raison ! Là, je m’emmêle un peu ....

    Ci-joint ton code exemple modifié pour comprendre : MadaAnimation.zip

    Avant toute explication, note que dans le projet que tu as envoyé, la valeur de la propriété Interval du Timer1 était à 1.
    C'est infiniment trop faible, tu obliges le programme à Tick(er) tous les MILLIEME de seconde, 1000 fois par seconde ... !!!
    J'ai modifié cette valeur et je l'ai placée à 100. Si tu veux une animation continue, il faudra trouver autre chose (sauf si ton programme n'a vraiment rien d'autre à faire).

    Bon, je te fais la leçon, mais je n'ai pas de solution pour toi ...

    En fait, l'action du Timer est suspendue lorsque tu lances un code dans une boucle (boucle For dans mon exemple).
    C'est cette gestion de boucle qui ne rend pas la main tant qu'elle n'a pas achevé ses itérations et en particulier, elle ne permet pas le rafraichissement de l'écran. Donc, ton animation s'arrête.
    L’application que je te renvoie est très bien pour expérimenter ce problème.

    J'espère que quelqu'un t'apportera une solution ...

  8. #8
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    quand ton code s'exécute cela bloque le rafraichissement de l'interface, car c'est le même thread qui est utilisé pour ça
    ca attend donc que tu sortes de button.click pour rafraichir
    c'est pour ca que quand on a quelque chose qui dure potentiellement plus de quelques centaines de millisecondes on le fait sur un autre thread

    regarder le backgroundworker ou async/await
    Bonjour Pol63
    Merci beaucoup pour l'intervention dans ce sujet
    Je vais essayer de comprendre le BackgrounWorker aussi Async/Wait
    Amicalement
    MADA
    Citation Envoyé par Phil Rob Voir le message
    Ci-joint ton code exemple modifié pour comprendre : MadaAnimation.zip

    Avant toute explication, note que dans le projet que tu as envoyé, la valeur de la propriété Interval du Timer1 était à 1.
    C'est infiniment trop faible, tu obliges le programme à Tick(er) tous les MILLIEME de seconde, 1000 fois par seconde ... !!!
    J'ai modifié cette valeur et je l'ai placée à 100. Si tu veux une animation continue, il faudra trouver autre chose (sauf si ton programme n'a vraiment rien d'autre à faire).

    Bon, je te fais la leçon, mais je n'ai pas de solution pour toi ...

    En fait, l'action du Timer est suspendue lorsque tu lances un code dans une boucle (boucle For dans mon exemple).
    C'est cette gestion de boucle qui ne rend pas la main tant qu'elle n'a pas achevé ses itérations et en particulier, elle ne permet pas le rafraichissement de l'écran. Donc, ton animation s'arrête.
    L’application que je te renvoie est très bien pour expérimenter ce problème.

    J'espère que quelqu'un t'apportera une solution ...
    Bonjour Phil Rob
    Merci maitre pour l'aide
    Tres tres gentil de votre part
    Je vais essayer de comprendre vos super lecons
    Note : j'ai pas pu voir et telecharger le fichier (MadaAnimation.zip)
    Merci
    Cordialement
    MADA

  9. #9
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Excuse-moi, j'ai oublié de joindre le ZIP : MadaAnimation.zip


  10. #10
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut
    Je vous remercie infiniment Phil Rob
    J'ai testé le Zip avec un code d'impression mais malheureusement ca ne fonctionne pas d'une facon ideale .. et le texte animé s'arretera temporairement .. pas d'une facon totale .. mais on remarque largement pendant l'execution du code d'impression ..
    Merci d'avance pour l'aide
    Amicalement
    MADA

  11. #11
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Bonjour,

    Je rejoins Pol63, il faut utiliser les Threads.

    En gros, ça te permet d’exécuter du code hors de l'interface.
    L'interface reste donc disponible pour faire ce qu'elle est codée pour faire (changements dynamiques, clics sur des boutons,...)

    Essaye ce tuto, c'est celui que j'ai utilisé pour apprendre ce concept :


  12. #12
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 250
    Points : 121
    Points
    121
    Par défaut
    Merci .. tres gentil de votre part cher Thovan
    Lecons simples et faciles a comprendre .. merci pour ce lien interessant
    Amicalement
    MADA

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/08/2013, 19h59
  2. exécution de deux fonctions simultanément.
    Par wulian dans le forum MATLAB
    Réponses: 9
    Dernier message: 05/08/2010, 13h13
  3. Exécution simultanée de deux callback avec pause
    Par laurent.bras dans le forum MATLAB
    Réponses: 11
    Dernier message: 13/10/2008, 14h28
  4. Exécuter simultanément plusieurs fonctions
    Par benj63 dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/10/2005, 16h42
  5. Que deux événements qui se passent en même temps.
    Par Melchisedec dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/08/2003, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo