Bonjour,
J'ai utilisé un thread pour remplir une datagridview, mais ceci engendre le blocage de l'ascenseur du DataGridView
Est ce que vous pouvez m'aider ?
Merci
Bonjour,
J'ai utilisé un thread pour remplir une datagridview, mais ceci engendre le blocage de l'ascenseur du DataGridView
Est ce que vous pouvez m'aider ?
Merci
Slt
C'est bizarre que ca te bloque la scrollbar. Ca te le bloque pendant le chargement ou une fois terminer?
++
rien d'anormal en fait.
créer des threads c'est bien, mais bien gérer les intéractions avec l'UI c'est mieux.
il faut savoir que les threads n'ont pas le droit d'intervenir sur les winforms, enfin sur les contrôles fenêtrés.
Ainsi un thread n'a pas le droit de venir perturber le déroulement de l'interface graphique et il n'a donc pas le droit de venir modifier les propriétés des divers contrôles fenêtrés.
voici un exemple de code qui permet de gérer ce problème de cross-threading.
dans ta form où se situe ta DGV :
et dans ton thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Public Delegate Sub Proc(ByVal sender As Object, ByVal e As DataTable) Public Sub FillDGV(ByVal invoker As Object, ByVal dt As DataTable) If invoker Is Nothing Then Me.Invoke(New Proc(AddressOf FillDGV), Me, dt) Else Me.DGV.SuspendLayout() Me.DGV.DataSource = dt ' ici tu défini les colonnes visibles et invisible, celles qui sont readonly ou pas si certaines sont en écritures et pas d'autres... Me.DGV.ResumeLayout() End If End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ... Dim dt = New DataTable ' ta boucle pour remplir la dt plutôt que de remplir directement la datagridview MyForm.FillDGV(Nothing, dt)
Merci Monsieur, je vais essayer ca![]()
![]()
est ce que ton thread à bien rempli le dataset et la bien fourni à la méthode remplissage synchronisée dans le thread UI ?
c'est la question à ce poser, n'hésite pas à provoquer sciemment des exception (throw new) dans un contexte ou l'autre pour voir ou ce situe le problème, ou mettre des points d'arrêts et bien faire ton débogage...
donc fait ton débogage en 2 phases
tout d'abord tu débogue dans le contexte du thread, pour cela les points d'arrets/exceptions tu les met dans le threads et éventuellement dans la méthode d'interfaçage exécutée par le thread pour savoir si justement il fourni bien le dataset.
ensuite tu place les points d'arret dans le contexte UI et la vérifie que cette meme méthode synchronisée, recoit bien le dataset, et surtout qu'elle remplie bien la Datagrid
Partager