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
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.
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
Pourriez-vous svp m'aider?
Un grand merci
Partager