Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Mettre à jour une datagrid depuis un thread [ Système / Autre ] (dimitriusai)

vendredi 4 juillet 2008 à 10:29:51 | Mettre à jour une datagrid depuis un thread

dimitriusai

Bjr , j'ai essayé avec un delegate afin de pouvoir rafraichier/ajouter des composant dans un datagrid depuis un thread, mais sans résultat, qqun saurait il m'expliquer comment faire ?

Voici la form1 ou est déclaré, utilisé le datagrid et lancé le thread.
Et voici la classe que j'instancie pour le thread

Dim myThreadObj As New ThreadCalculs(var2, var1)
        _threadCalculs1 = New Threading.Thread(AddressOf myThreadObj.ThrFunc)
        _threadCalculs1.Start()


Et voici la classe que j'instancie pour le thread

Imports System.Threading

Public Class ThreadCalculs
    Dim *********** As ArrayList
    Dim *********** As ArrayList

    Public Sub New(ByVal _GroupsList As Object, ByVal _TSResult As Object)
        *************************
    End Sub

    'Fonction utilisée dans le Thread
    Public Sub ThrFunc()
        Try
            ***************
                        C'est ici que je voudrais mettre à jour le datagrid

                            Form1.DataGridView1.Rows.Add(TSQuery.RemoveRDPTCP(TSResult_Users))

                        C'est ici que je voudrais mettre à jour le datagrid

            ***************
        Catch ex As Exception
        End Try
    End Sub

End Class

Merci d'avance pour votre aide

vendredi 4 juillet 2008 à 11:44:41 | Re : Mettre à jour une datagrid depuis un thread

NHenry

Membre Club
Bonjour,

Utilises la méthode Invoke de ton controle, cela te permettra de lancer une sub/function dans le thread principal sans générer l'exception de tentative de modif par un autre thread.

Ma signature pour pointer sur mon site

vendredi 4 juillet 2008 à 11:46:29 | Re : Mettre à jour une datagrid depuis un thread

dimitriusai

Merci de ta réponse, mais on m'a déjà repondu cela mais je ne sais comment faire ? as tu un exemple ou peux tu me montrer dans le code ci dessus.

 

Merci d'avance 

Passioné d'informatique et Etudiant en Informatique et réseaux ==> Animateurs Patro


vendredi 4 juillet 2008 à 11:55:57 | Re : Mettre à jour une datagrid depuis un thread

NHenry

Membre Club
Bonjour,

Il faut que tu créé une sub/function qui modifiera ton controle.
Ensuite, tu créé un Delegate à l'image de la méthode que tu as crée
Puis Quand tu veux procéder au rafraichissement, tu utilises le Invoke (New MonDelegate( adressOf MaMethod,new object(){Paramètres})

Ma signature pour pointer sur mon site

vendredi 4 juillet 2008 à 12:42:47 | Re : Mettre à jour une datagrid depuis un thread

dimitriusai

Je l'utilise de la facon suivante et aucune information ne s'affiche dans le datagrid, alors que sans le thread cela fonctionne (mais freeze le programme lors de trop longue attente)

    Private Delegate Sub chg_datagrid_del(ByVal my_object As Object)
    Private Sub chg_datagrid(ByVal _mon_object As Object)
        Form1.DataGridView1.Rows.Add(_mon_object)
        Form1.DataGridView1.Refresh()
    End Sub


et je l'appelle comme ceci dans mon thread

     Dim del As chg_datagrid_del
     del = New chg_datagrid_del(AddressOf Me.chg_datagrid)
     del.Invoke(mon_object)

Merci d'avance si tu vois ce qui ne va pas.
Si d'autre personne on un exemple concret/complet et qui fonctionne, cela m'aiderait fortement, ou une documentation.
Cordialement

vendredi 4 juillet 2008 à 13:59:16 | Re : Mettre à jour une datagrid depuis un thread

Kevin.Ory

Salut,

Pour faire plus simple, et si c'est suffisant, tu peux utiliser un BackgroundWorker (se trouve dans System.ComponentModel)

   Private WithEvents Worker As New System.ComponentModel.BackgroundWorker
    Private Sub LancerCalcul(ByVal InputDatas As String)
        ' Lancer un calcul dans un thread séparé
        Worker.WorkerReportsProgress = True
        Worker.RunWorkerAsync(
InputDatas)
    End Sub
 
    Private Sub Worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Worker.DoWork
        ' Cette procédure s'éxécute dans le thread séparé
        ' Faire le calcul/les attentes qui prend du temps ici
        Dim ProgressDatas As String = "machin"
        Worker.ReportProgress(0,
ProgressDatas )
        ' Encore des calculs/attentes
        Dim ResultDatas As String = "truc"
        e.Result =
ResultDatas
    End Sub

    Private Sub Worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Worker.ProgressChanged
        ' Cette procédure s'éxécute dans le thread principal
        ' Tu peux y mettre le DataGrid à jour...
        Console.WriteLine(e.UserState)
    End Sub

    Private Sub Worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Worker.RunWorkerCompleted
        ' Cette procédure s'éxécute dans le thread principal
        Console.WriteLine("Terminé: " & e.Result)
    End Sub


vendredi 4 juillet 2008 à 14:15:59 | Re : Mettre à jour une datagrid depuis un thread

NHenry

Membre Club
Bonjour,

Ton code est erroné :

     Dim del As chg_datagrid_del
     del = New chg_datagrid_del(AddressOf Me.chg_datagrid)
     del.Invoke(mon_object)

devient :
     Dim del As chg_datagrid_del
     del = New chg_datagrid_del(AddressOf Me.chg_datagrid)
    
Me.chg_datagrid.Invoke(del,new object(){mon_object})

Ma signature pour pointer sur mon site



Cette discussion est classé dans : end, datagrid, jour, thread, form1


Répondre à ce message

Sujets en rapport avec ce message

[VB Net] Mise à jour d'un control dans un thread [ par Houba ] Bonjour,voilà mon soucis : Je suis en train de faire une appli client / serveur. La communication entre les deux se passent bien et c'est mon serveur Mis a jour DataGridView => DataTable => DataBase [ par simo5963 ] Bonjour ;'Mis a jour entre dataGridView(DataGrid) et un table qui est dans <span style="mso-spacerun: Multithreading et Forms (delegate, class et invoke) [ par shackleton1986 ] Je vais essayer mon problème de la manière la plus simple ...Mon but est de pouvoir modifier un contrôle TextBox de ma fenêtre principale  à partir de mis a jour d''un datagrid [ par karima0001 ] bonjour tout le monde, j'ai un probleme de mise a jour d'un datagrid, je crois ke le blem est du du rassembelement de plusieurs infos de plusieurs tab Listbox veut pas se remplir ds Thread (vb.net) [ par nerone21 ] Bonjour à tous les serials codeur, j'ai un petit souçis avec un mechant thread ou une mechante form... je précise je suis un débutant, alors un peu d' User Form relié à un tableau exell [ par isis1be ] Salut à tous,Je vient de me mettre au vba pour des besoin professionel mais je n'y connait presque rien, donc un coup de main m'est nécessaire.Je doit Exécuter dans un thread différent le rafraichissement d'une datagrid [ par Billybobbonnet ] Bonjour à tous,J'ai une application windows form en .net dans laquelle une datagrid se remplit avec le contenu d'une bdd mySQL. Je voudrais faire tour Fonction comme JOUR.OUVRE avec week end [ par drik56 ] Salut a tous, Je cherche une fonction identique a la fonction SERIE.JOUR.OUVRE mais avec les week end ce qui ne serait plus jour ouvré mais SERIE.JOUR Thread en fond + mise à ,jour de valeurs dans Thread "main" [ par Anakkin ] Bonjour, Je me permets de vous convoiter car je développe actuellement un produit et je rencontre un problème de partage de variable entre thread.Mon Service windows et webbrowser ? [ par cbu ] Bonjour,j'aurai besoin à partir d'un service windows, de lancer une page internet et suivant les traitements, me renvoie des réponses en javascript.Po


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,23 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.