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 :

Problème avec les Threads


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut Problème avec les Threads
    Bonjour,
    J'ai besoin d'afficher des controles pendants un traitement lord .
    j'ai réaliser un petit exemple ,pendant que la boucle infini tourne je veux afficher un bouton




    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Imports System.Drawing
    Imports System.Threading
    Imports System.Windows.Forms
    Public Class Form1
     
        Private t As Thread
        Private t1 As Thread
        Private Delegate Sub ChangeLabel(ByVal str As String)
        Private Delegate Sub boucle()
     
        Private Sub ThreadMethod()
            Me.Invoke(New ChangeLabel(AddressOf ChangeLabelText), "Label après opération")
     
        End Sub
        Private Sub ChangeLabelText(ByVal str As String)
            labelTest.Text = str
            ProgressBar1.Visible = True
            Button2.Visible = True
            Thread.Sleep(2000)
        End Sub
        Private Sub ThreadMethod2()
            Me.Invoke(New boucle(AddressOf loopp))
     
        End Sub
        Private Sub loopp()
            Dim i As Int16 = 0
            While i < 10666
                ListBox1.Items.Add(i)
                ' i += 1
            End While
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            t = New Thread(New ThreadStart(AddressOf ThreadMethod))
            t.Start()
     
            t1 = New Thread(New ThreadStart(AddressOf ThreadMethod2))
            t1.Start()
     
        End Sub
     
     
    End Class
    Merci pour votre aide

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Me.Invoke sert à revenir sur le thread principal
    donc tu démarres un thread sur ThreadMethod qui repart aussitot sur le thread principal pour modifier le label ; donc inutile

    ensuite tu démarres un thread sur ThreadMethod2 mais tu repart aussitot sur le thread principal pour faire la boucle
    il faut mettre la boucle dans ThreadMethod2

    par contre on ne peut pas listbox.items.add sur un autre thread que le thread principal, c'est juste cette partie qu'il faut ramener sur le thread principal
    ou mettre les éléments dans un list(of ) (non graphique) et à la fin mettre tous les items dans le listbox
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Par défaut
    Merci "Pol63" j'ai trouvé la solution grâce à vos remarques ,voici la solution pour ceux qui ont besoin .

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Imports System.Drawing
    Imports System.Threading
    Imports System.Windows.Forms
    Public Class Form1
     
        Private t As Thread
        Private t1 As Thread
        Private Delegate Sub ChangeLabel(ByVal str As String)
        Private Delegate Sub boucle(ByVal j As Int16)
     
        Private Sub ThreadMethod()
            Me.Invoke(New ChangeLabel(AddressOf ChangeLabelText), "Label après opération")
     
        End Sub
        Private Sub ChangeLabelText(ByVal str As String)
            labelTest.Text = str
            ProgressBar1.Visible = True
            Button2.Visible = True
     
        End Sub
        Private Sub Fin(ByVal str As String)
            labelTest.Text = str
            ProgressBar1.Visible = False
            Button2.Visible = False
     
        End Sub
        Private Sub ThreadMethod2()
     
            Dim i As Int16 = 0
            While i < 12666
                i += 1
                Me.Invoke(New boucle(AddressOf loopp), i)
            End While
     
            Me.Invoke(New ChangeLabel(AddressOf Fin), "fin")
        End Sub
        Private Sub loopp(ByVal j As Int16)
            ListBox1.Items.Add(j)
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            t = New Thread(New ThreadStart(AddressOf ThreadMethod))
            t.Start()
     
            t1 = New Thread(New ThreadStart(AddressOf ThreadMethod2))
            t1.Start()
        End Sub
     
     
    End Class

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

Discussions similaires

  1. Problème avec les thread
    Par _SamSoft_ dans le forum Réseau
    Réponses: 21
    Dernier message: 28/10/2007, 15h21
  2. problèmes avec les threads
    Par lukbutor dans le forum C
    Réponses: 7
    Dernier message: 03/05/2007, 00h15
  3. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  4. [BOOST] Problème avec les threads
    Par SOAD08 dans le forum Dev-C++
    Réponses: 7
    Dernier message: 08/10/2006, 10h23
  5. Réponses: 5
    Dernier message: 10/05/2005, 10h22

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