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 :

Afficher données en temps réel [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Afficher données en temps réel
    Bonjour à tous,

    Dans mon appli, j'ai une procédure contenant une boucle for.. next, qui remplie plusieurs listes à chaque itération. Par la suite ces listes remplissent une DataGridView.

    Ce que je souhaiterai faire :
    Pouvoir proposer à l'utilisateur de visualiser les données arrivant dans la DGV, au fur et a mesure que les itérations se succèdent. En gros je ne sais pas si c'est possible ni très lisible, mais j'aimerai que l'utilisateur puissent voir l'avancement de la procédure en temps réel. Et par la suite lui donner la possibilité de stopper la procédure quand il le souhaite.

    Pour ce faire je me suis renseigné un peu partout et les mots clés backgroundworker et treads reviennent souvent. Mais j'ai un mal fou à manipuler ce contrôle qui refuse de m'obéir!
    Quelqu'un aurai t'il une suggestion? Même une esquisse de solution serai bienvenue!
    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Bah déjà commence par montrer le code qui refuse de t'obéir On pourra donc voir ce qui ne va pas...
    N'oubliez pas le tag et

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    Le principe c'est que si tu fais un traitement long dans le thread de l'interface tu vas freeze l'ecran. (Tu peux toujours faire un truc Application.DoEvent() mais c'est plutôt crade et ca bloque quand même l’écran)

    Le backgroundWorker te permet de définir une tache de manière simple qui sera exécute dans un autre Thread . Il possède un event ProgressChanged qui lui va s'executer dans le thread de l'interface.
    Tu dois donc passer en paramètre de l'event l'objet que tu souhaites ajouter dans ta gridview.
    Voici un exemple avec une liste de fichier
    http://www.vbforums.com/showthread.p...=1#post3053807

  4. #4
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Voici :
    sans oublier le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Threading
    Je déclare mon thread comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MonThread as new Thread(Adress of Affichage_donnees)
    où Affichage_donnees est la sub ci dessous (qui execute le traitement et qui rempli listes + DGV)

    Le volume de code est assez indigeste et surtout inutile de le développer, mais en gros c'est ça :

    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
    Public sub Affichage_donnee
     
    'déclaration des listes, variables utilisées etc..
     
     
     
            For i = 2 To Liste1.Count - 2
                d3 = d3 + 1
                pgb1.Value = d3
                For j = i - 1 To 1 Step -1
     
    'traitement
     
                    Liste1.Add(ListeA(i))
                    Liste2.Add(ListeB(i))
                    Liste3.Add(ListeA(j))
                    Liste4.Add(ListeB(j))
                    Liste5.Add(ListeC(i))
                    Liste6.Add(ListeD(j))
                    Liste7.Add(compteur)
     
    'traitement
     
     
                   mydatagridview8.Rows(k).Cells(0).Value =  Liste1.Item(i)
                   mydatagridview8.Rows(k).Cells(1).Value =  Liste2.Item(i)
                   mydatagridview8.Rows(k).Cells(2).Value =  Liste3.Item(j)
                   mydatagridview8.Rows(k).Cells(3).Value =  Liste4.Item(j)
                   mydatagridview8.Rows(k).Cells(4).Value =  Liste5.Item(i)
                   mydatagridview8.Rows(k).Cells(5).Value =  Liste6.Item(j)
                   mydatagridview8.Rows(k).Cells(6).Value =  Liste7.Item(compteur)
     
                Next
     
            Next
     
    End sub

    En bon débutant, je pensais donc proposer des boutons avec :

    MonThread.start() pour commencer l'exécution
    MonThread.suspend et MonThread.resume pour que l'utilisateur puisse suspendre/reprendre la boucle.
    Mais rien de tout cela ne fonctionne.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    J'avais pas vu ton post Micka, ok donc j'oublie ce que j'ai tenté et je décortique ton lien, ça a pas l'air simple mais ça doit valoir le coup

    EDIT : Ok donc dans mon cas j'obtiens un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
      BackgroundWorker1.RunWorkerAsync()
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
      For i = ....
        For j = .....
        je remplis mes listes 
        je remplis ma DGV 
        Next
      Next
     
    End Sub

    Ensuite pour avoir l'avancement en temps réel je mets la propriété WorkerReportsProgress de mon bdw à true, et je rentre un paramètre dans le reportprogress(...).

    Et pour finir pour mettre a jour le thread principale, j'écris cette sub la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub BackgroundWorker1_ProgressChanged( _
    ByVal sender As Object, _
    ByVal e As ProgressChangedEventArgs) _
    Handles BackgroundWorker1.ProgressChanged
     
    'changement dans ma datagridview
    End Sub
    Bon il y a encore du boulot mais ça commence à être plus clair.

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

Discussions similaires

  1. Afficher des données en temps réel
    Par aymen8219 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 22/03/2016, 09h12
  2. afficher des valeurs de la base de données en temps réel
    Par sihamnet dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 12/03/2014, 14h45
  3. Afficher Données en temps réel
    Par aymen8219 dans le forum ASP.NET MVC
    Réponses: 10
    Dernier message: 04/02/2013, 18h24
  4. Afficher, incrémenter en temps réel et sans stockage
    Par sisco97 dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2007, 15h51
  5. Réponses: 7
    Dernier message: 27/01/2006, 01h44

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