Bonjour,

Je sollicite votre aide pour l'utilisation de BackgroundWorker, pour lequel j'ai du mal à saisir le fonctionnement.

Voici mon souci:

Je souhaiterais lister les dossiers d'un répertoire et afficher le contenu dans une Listbox se trouvant dans ma Form.

En dehors du BackgroundWorker, cela fonctionne sans problème.

Mais dès que j'intègre le code à un BackgroundWorker (pour éviter de bloquer complèment la Form et pouvoir lancer d'autres tâches simultanément), il m'affiche le très connu message "Cross-Thread operation not valid...".

Voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
Liste_Des_Dossiers_ListBox.Items.Clear()
Liste_Des_Dossiers_ListBox.Refresh()
 
Liste_Des_Dossiers_BackgroundWorker.RunWorkerAsync()
 
End Sub

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Liste_Des_Dossiers_BackgroundWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Liste_Des_Dossiers_BackgroundWorker.DoWork
 
Dim Dossier_Principal As String  = "c:\temp"
Dim Liste_Des_Dossiers As New IO.DirectoryInfo(Dossier_Principal)
 
For Each Dossier As IO.DirectoryInfo In Liste_Des_Dossiers.GetDirectories
 
Liste_Des_Dossiers_ListBox.Items.Add(Dossier.ToString)
Liste_Des_Dossiers_ListBox.Refresh()
 
Next
 
End Sub

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
Private Sub Liste_Des_Dossiers_BackgroundWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Liste_Des_Dossiers_BackgroundWorker.RunWorkerCompleted
 
MessageBox.Show("Listing des dossiers effectué")
 
End Sub
Il y a bien de nombreux forums qui traite du BackgroundWorker de manière générale, mais je ne trouve rien sur le listing de dossier.

Pourriez-vous svp m'aider?

Un grand merci