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

Windows Forms Discussion :

[vb.net][Thread] Basculer entre Thread


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 852
    Par défaut [vb.net][Thread] Basculer entre Thread
    Bonjour, j'ai un Thread qui est lancé eet qui permet de faire un traitement assez long, à la fin de ce Thread j'appel une fonction qui faire le thread (avec un .abort) et qui cloture l'application.
    Le problème c'est que le thread ne peux pas s'executer tout seul.

    Si je lance la cloture sur le thread principale, elle va etre lancé en meme temps que le thread de traitement sans le laisser terminé, comment faire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t = New Thread(AddressOf ExecuteActions)
    t.Start()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ExecuteActions()
         Traitement()
         Finalisation()
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Finalisation()
         t.abord
         application.Exit
    End Sub

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    A quoi sert le thread ?
    Si l'application doit se fermer à la fin du traitement, il suffit de faire ce traitement puis de terminer l'appli.

  3. #3
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 852
    Par défaut
    ben le thread sert a faire une serie de Ping et autre, une fois terminé, je lance une fonction Finalisation () qui génère des rapports.
    Une fois les rapport générer, je veux lancer ma fonction _Stop() qui ferme mon application, le problème c'est que ma fonction stop refuse de se lancer, je vous donne le code réel

    J'ai réussi a corrigé le bug avec un msgbox, se qui signifie que le bug viens du thread car les msgbox sont lancé a partir du thrad principal

    Code qui marche pas :
    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
    18
    19
        Private Function _Stop()
            timerUp.Enabled = False
            timerDown.Interval = 5
            _y = 149
            Me.Opacity = 1
            timerDown.Enabled = True
        End Function
        Private Sub timerDown_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerDown.Tick
            lbl_msg.Text = _y
            Me.Location = New System.Drawing.Point(Screen_x - 350, Screen_y - _y)
            Me.Opacity = _y / 140
            Me.Visible = True
            _y = _y - 1
            If (_y = 0) Then
                timerDown.Enabled = False
                Me.Opacity = 0
                Application.Exit()
            End If
        End Sub
    Code qui marche :
    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
    18
    19
    20
        Private Function _Stop()
            timerUp.Enabled = False
            timerDown.Interval = 5
            _y = 149
            Me.Opacity = 1
            timerDown.Enabled = True
            MsgBox("Scan terminé")
        End Function
        Private Sub timerDown_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerDown.Tick
            lbl_msg.Text = _y
            Me.Location = New System.Drawing.Point(Screen_x - 350, Screen_y - _y)
            Me.Opacity = _y / 140
            Me.Visible = True
            _y = _y - 1
            If (_y = 0) Then
                timerDown.Enabled = False
                Me.Opacity = 0
                Application.Exit()
            End If
        End Sub

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 43
    Par défaut
    Tu as regardé si t'as fonction timerDown_Tick fonctionnait bien ?

    As tu mis un BreakPoint sur Application.Exit() pour voir s'il passait dessus ?

  5. #5
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 852
    Par défaut
    dans le 2eme cas ou je met juste un MsgBox() en plus, la fonction timer fonctionne bien.
    J'ai bien un défilement de 150 à 0 qui s'affiche dans mon label et l'application se ferme sans problème.
    Par contre si j'ai pas le msgbox(plus rien ne marche).

    je pense que le msgbox joue un role de basculement entre Thread, à mon avis, on, repasse sur le principal.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Je me répète : pourquoi ne pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Sub Main()
          Traitement()   ' ce que tu fais dans le thread
          EditionRapport() 
       End Sub           'fin de l'application

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Interaction entre thread principal et thread secondaire
    Par mehdi_me85 dans le forum Threads & Processus
    Réponses: 37
    Dernier message: 28/05/2009, 15h08
  2. [thread] communication entre threads
    Par untipy dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 30/08/2007, 15h47
  3. [VB.Net][Threading] Communication entre processus
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2006, 15h15
  4. [VB.NET 2.0] Cross-Thread Exception
    Par guillaume1998 dans le forum Windows Forms
    Réponses: 13
    Dernier message: 30/01/2006, 18h16
  5. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42

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