Bonjour a tous ,
J'ai réalisé une connexion à une LDAP qui m'affiche la liste des loggin Windows dans une Combobox.
Cette connexion + filtre freezaient mon application, j'ai donc décider de mettre ma sub dans un Background worker :
TacheDeFond.RunWorkerAsync()
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
| Private Function TacheDeFond_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles TacheDeFond.DoWork
'Connexion à l'annuaire LDAP
Dim monEntryLDAP As New DirectoryEntry(CheminLdap, _
NomConnectLdap, _
PassConnectLdap)
Dim maRecherche As DirectorySearcher = New DirectorySearcher(monEntryLDAP)
'On filtre uniquement sur les utilisateurs
maRecherche.Filter = "(objectclass=user)"
'Utilisateurs à lister
Dim lesUsers As DirectoryEntry
'Affichage des utilisateurs listé
Try
'Boucle permettant a mon curseur d'avancer tant qu'il y a des resultats et d'implémenter ma ListView
For Each result As SearchResult In maRecherche.FindAll
'On récupère l'entrée trouvée lors de la recherche
lesUsers = result.GetDirectoryEntry
'Remplissage du comboBox si et sulement si les valeurs login,nom sont renseignées
If lesUsers.Properties("sAMAccountName").Value <> "" _
And lesUsers.Properties("sn").Value <> "" Then
monTabResultLdap(0) = (lesUsers.Properties("sAMAccountName").Value) 'Login
End If
Next
Console.WriteLine(monTabResultLdap)
Return monTabResultLdap
'Fermeture de la connexion
monEntryLDAP.Close()
Catch ex As Exception
MsgBox("Erreur lors de la connexion Ldap 1 : " & ex.Message & " " & ex.ToString)
Return ""
Exit Function
End Try
Catch ex As Exception
MsgBox("Erreur lors de la connexion Ldap2 " & ex.Message & " " & ex.ToString)
Return ("")
Exit Function
End Try
End Function |
Dans la mesure ou mon Interface est construite dans un autre threade je ne peut plus interagir avec ma combo box du début.
J'ai donc décidé de faire une fonction qui me retournerai un tableau incrémenté par les résultats de la requête ldap.
Mais je n'y arrive pas (voir ligne ne gras sur le code)
Voici comment je l'exploiterais si j'y arrive
1 2 3 4 5 6
| Private Sub TacheDeFond_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles TacheDeFond.RunWorkerCompleted
'Quand le code d'arrière plan est terminé la procédure RunWorkerCompleted est exécutée.
'On ajoute les données dans la combo box
CB_LdapUser.Items.Add(monTabResultLdap)
MsgBox("terminé")
End Sub |
Pourriez vous m'apporter de l'aide .
Mecri
Partager