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 :

comment utiliser Les threads


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut comment utiliser Les threads
    Salut à tous le monde,
    Dans mon projet j'ai besoin d'afficher des videos simultanément,et j'ai une seul Methode avec un parametre d'entrer qui fait la lecture de ces vidéos là.
    S'il veur plait comment je doit faire pour lire toutes les vidéos en meme temps en utilisant les Threads.
    Merci de votre aide.

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Très simple en .NET 2005, il existe le controle BackGroundWorder (en gros travailleur d'arrière plan) qui s'execute dans un thread à part !

    Donc si tu as 3 videos tu utilises 3 BDW
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    Comment utiliser plusieurs back ground BackgroundWorker ?

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    tu va dans ta boite à outils et puis tu selectionnes 3 BGW. En suite tu va dans le code et tu selectionnes les evenements correspondant à tes BGW : "Do_Works" "Progress" "Finish" en gros

    Voila
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    Mais je veut les generer automatiquement car il se peut qu'il y aura plusieurs Vidéos à la fois.
    Merci.

  7. #7
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Si tu préféres tu peux les créer avec le code !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  8. #8
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Vu ton double post je vais t'aider :
    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 Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim BDW As New System.ComponentModel.BackgroundWorker
            AddHandler bgw.DoWork, AddressOf Traitement
            AddHandler bgw.ProgressChanged, AddressOf Progression
            AddHandler bgw.RunWorkerCompleted, AddressOf Termine
        End Sub
        Private Sub Traitement(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            'traitement à executer en arrière plan !
        End Sub
        Private Sub Progression(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
            'se declanche pendant la prgression du traitement
        End Sub
        Private Sub Termine(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
            'ici procedure quand le travail est terminé
        End Sub
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  9. #9
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Par défaut
    En quoi le BackGroundWorker remplace-t-il les threads ?
    Peut-on les utiliser avec les mêmes objectifs ? L'un est-il plus léger que l'autre ? Y a-t-il un partage des données avec le BackGroundWorker ?

  10. #10
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Bonjour,

    tu aurais dû créer un autre post pour ce message.
    Néanmoins le Backgroundworker ne remplace pas les threads, ils les utilisent. C'est un composant qui te permet d'executer des tâches en arrière plan et qui facilitent la vie.

    Bye.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    J'ai pas reussi à l'integrer dans mon projet, voilà je vous montre la classe qui fait la lecture des Vidéos :
    j'ai travailler avec ParameterizedThreadStart il passe la lecture mais de maniere en ordre.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Imports System.io
    Imports System.Xml
    Imports System.Threading
    Imports System.Windows.Forms
    Imports System.ComponentModel
     
    Public Class Media
     
        Dim BinPath As String = Application.StartupPath & "\" 'le chemin vers le repertoire Bin
        Dim c_planning As Planning
        Dim startApp As DateTime
        Dim theFile As FileStream
        Dim writer As StreamWriter
        Dim opZone As New ParameterizedThreadStart(AddressOf trierBlocsWithContent)
        Private Delegate Sub MethodInvoker(ByVal oBlock As Object)
     
        ''' <summary>
        ''' Methode pour laisser les traces de debogages
        ''' </summary>
        ''' <param name="str"></param>
        ''' <remarks></remarks>
        Sub Log(ByVal str As String)
            Try
                writer.WriteLine(DateTime.Now.ToString + " : " + str)
            Catch ex As Exception
                writer.Close()
                theFile.Close()
            End Try
        End Sub
     
     
        ''' <summary>
        ''' Merthode permet de faire la Lecture des medias par Bloc
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub PlayBlocWithContent()
            Dim mTimeline As TimeLine
            Dim uc As UserControl1
     
            For Each vZone As DataRowView In dv_zone
                dv_TimeLine.RowFilter = "ZoneID=" & vZone("ZoneID")
                Dim p As Point
                'creation des users controle pour chaque zone
                uc = New UserControl1
                uc.Name = "uc" & vZone("ZoneID")
                uc.Height = vZone("ZoneHieght")
                uc.Width = vZone("ZoneWidth")
                uc.Top = vZone("ZoneTop")
                uc.Left = vZone("ZoneLeft")
                p.X = vZone("ZoneLeft")
                p.Y = vZone("ZoneRight")
                uc.Location = p
                Me.Controls.Add(uc)
     
                For Each vTimeLine As DataRowView In dv_TimeLine
                    mTimeline = New TimeLine
                    mTimeline.TimeLineID = vTimeLine("TimeLineID")
                    mTimeline.TimeLineName = vTimeLine("TimeLineName")
                    mTimeline.ZoneID = vTimeLine("ZoneID")
                    mTimeline.Ajouter_Bloc()
     
                    Dim theThread As New Thread(opZone) 'creer pour chaque Zone un Thread
                    theThread.SetApartmentState(ApartmentState.STA)
                    theThread.Start(mTimeline)
                Next
            Next
        End Sub
     
        Dim d_content As DateTime = dv_Planning.Item(0).Item("PlanningStartDate")
        Dim d_bloc As DateTime = dv_Planning.Item(0).Item("PlanningStartDate")
     
        ''' <summary>
        ''' Methode permet de trie les contenus par Bloc
        ''' </summary>
        ''' <remarks></remarks>
        ''' 
        Public Sub trierBlocsWithContent(ByVal obj As Object)
            Dim vTimeline As New TimeLine
            vTimeline.TrieBloc()
            vTimeline = CType(obj, TimeLine)
     
            Log("Thread :" & Thread.CurrentThread.Name)
     
            If Me.InvokeRequired Then
                Me.Invoke(New MethodInvoker(AddressOf trierBlocsWithContent), vTimeline)
            Else
                Dim uc As UserControl1
                uc = Me.Controls("uc" & vTimeline.ZoneID.ToString())
                For i As Integer = 0 To vTimeline.Array_Bloc.Count - 1
                    Dim c_bloc As Bloc = CType(vTimeline.Array_Bloc.Item(i), Bloc)
     
                    If d_bloc.AddSeconds(CType(vTimeline.Array_Bloc.Item(i), Bloc).BlocDuration) >= Now Then
                        CType(vTimeline.Array_Bloc(i), Bloc).TrieContent()
                        For Each item As Content In CType(vTimeline.Array_Bloc(i), Bloc).Array_Content
                            uc.playContent(BinPath & item.MediaURL)
                            uc.SetBounds(uc.Location.X, uc.Location.Y, uc.Width, uc.Height, BoundsSpecified.All)
                            Thread.Sleep(1000)
                            d_content = d_content.AddSeconds(item.contentDuration)
                        Next
                    End If
                    d_bloc = d_bloc.AddSeconds(CType(vTimeline.Array_Bloc.Item(i), Bloc).BlocDuration)
                Next
            End If
        End Sub
     
        ''' <summary>
        ''' chargement de de l'application 
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        ''' <remarks></remarks>
        Private Sub Media_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            theFile = File.Create(Application.StartupPath + "\log.txt")
            writer = New StreamWriter(theFile)
            Me.WindowState = FormWindowState.Maximized
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
            PlayBlocWithContent()
        End Sub
     
    End Class
    S'il vous plait ça fait plus que 2 jours de recherche,si vous avez quelques remarque je suis à l'ecoute.
    Merci d'avance.

  12. #12
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par alaa_85
    J'ai pas reussi à l'integrer dans mon projet
    Tu n'as du regarder mon code sur les BGW...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    je l'ai fait mais ça ne repond pas à mes besoins

  14. #14
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par alaa_85
    Salut à tous le monde,
    Dans mon projet j'ai besoin d'afficher des videos simultanément,et j'ai une seul Methode avec un parametre d'entrer qui fait la lecture de ces vidéos là.
    S'il veur plait comment je doit faire pour lire toutes les vidéos en meme temps en utilisant les Threads.
    Merci de votre aide.
    Je quote ton premier post...

    Bah le BGW sauf preuve du contraire permet de gérer l'affichage de chaque video dans un thread différent sans que l'application ne se fige et plante !

    Donc j'ai bien répondu à ta question non ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    Bah le BGW sauf preuve du contraire permet de gérer l'affichage de chaque video dans un thread différent sans que l'application ne se fige et plante !
    oui je suis tout à fait daccord avec toi Aspic mais le probleme ce comment l'integer dans le code ci-dessus car il y a 2 boucles imbriquer.
    tu vois

  16. #16
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Où tu vois deux boucles imbriquées ?
    De plus quelle procédure veux tu mettres dans un thread apart ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    voila la methode :
    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
     Public Sub trierBlocsWithContent(ByVal obj As Object)
            Dim vTimeline As New TimeLine
            vTimeline.TrieBloc()
            vTimeline = CType(obj, TimeLine)
     
            If Me.InvokeRequired Then
                Me.Invoke(New MethodInvoker(AddressOf trierBlocsWithContent), vTimeline)
            Else
                Dim uc As UserControl1
                uc = Me.Controls("uc" & vTimeline.ZoneID.ToString())
                For i As Integer = 0 To vTimeline.Array_Bloc.Count - 1
                    Dim c_bloc As Bloc = CType(vTimeline.Array_Bloc.Item(i), Bloc)
     
                    If d_bloc.AddSeconds(CType(vTimeline.Array_Bloc.Item(i), Bloc).BlocDuration) >= Now Then
                        CType(vTimeline.Array_Bloc(i), Bloc).TrieContent()
                        For Each item As Content In CType(vTimeline.Array_Bloc(i), Bloc).Array_Content
                            uc.playContent(BinPath & item.MediaURL)
                            uc.SetBounds(uc.Location.X, uc.Location.Y, uc.Width, uc.Height, BoundsSpecified.All)
                            Thread.Sleep(1000) 'pause pendant la durée du media
                            d_content = d_content.AddSeconds(item.contentDuration)
                        Next
                    End If
                    d_bloc = d_bloc.AddSeconds(CType(vTimeline.Array_Bloc.Item(i), Bloc).BlocDuration)
                Next
            End If
        End Sub
    NB:
    item.MediaURL:le chemin du video.
    la premier boucle c'est pour chaque zone et la 2 iemes c'est pour les video de ce zone là .
    j'espére que tu m'as compris.
    Merci

  18. #18
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    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
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim BDW As New System.ComponentModel.BackgroundWorker
            AddHandler bgw.DoWork, AddressOf Traitement
            AddHandler bgw.ProgressChanged, AddressOf Progression
            AddHandler bgw.RunWorkerCompleted, AddressOf Termine
        End Sub
        Private Sub Traitement(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
            'traitement à executer en arrière plan !
            trierBlocsWithContent(Args) 'appel de ta méthode
        End Sub
        Private Sub Progression(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
            'se declanche pendant la prgression du traitement
        End Sub
        Private Sub Termine(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
            'ici procedure quand le travail est terminé
    Msgbox("Traitement terminé")
        End Sub
    Voila un seule BGW suffit, toute ta mèthode et les deux boucles vont etre executées dans un thread apart !
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    Merci Bcp ASpic,je vais reessayer d'implementer ça .

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut
    Reste toujours le meme probleme

Discussions similaires

  1. Comment utiliser les thread dans ce cas ?
    Par ketchupi dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 03/06/2011, 00h56
  2. [ListSelectionListener] comment utiliser les threads?
    Par zaboug dans le forum Composants
    Réponses: 7
    Dernier message: 21/05/2010, 14h23
  3. comment utiliser les threads
    Par oumay dans le forum Général Java
    Réponses: 1
    Dernier message: 15/02/2010, 00h35
  4. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 14h04
  5. [C# 2.0][Form]Comment utiliser les Delegates & Threading
    Par Tips dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/01/2006, 14h22

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