Bonjour,
je suis en train de développer une application qui liste certains types de fichiers et qui donne la possibilité de les sauvegarder dans le répertoire de l'application.
Je vous explique comment se présente l'application :

Il y a une partie graphique où tous les fichiers trouvés sont listés dans une listbox à l'aide de thread. Une fois le listage fini, si l'on appuie sur le bouton copier, tous les fichiers se copient à l'aide de ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Try
            Dim file As FileInfo
            For Each fileitem In ListboxFichiersTrouvés.Items
                file = New FileInfo(fileitem)
                Dim FileSize As Long = file.Length
                Dim Taille As Long = TextBoxTailleMinimumCopieFichier.Text * 1024
                If TextBoxTailleMinimumCopieFichier.Text = "Taille du fichier minimum pour copier ( KO )" Then
                    Taille = "0"
                End If
                If file.Length > Taille Then
                    file.CopyTo(Path.Combine(Application.StartupPath, file.Name), True)
                End If
            Next
        Catch
            Call CopyDesFichiers()
        End Try

Le code marche très bien car le listage est fini, cependant j'aimerais pouvoir copier à chaque fois qu'un nouvel item apparait.
J'ai donc inséré un thread qui appel ma fonction copie lorsqu'un item est ajouté :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 Private Sub RemplirListe(ByVal Fichier As IO.FileInfo)
        ListboxFichiersTrouvés.Items.Add(Fichier.FullName)
        ListboxFichiersTrouvés.SelectedIndex = ListboxFichiersTrouvés.Items.Count - 1
 Dim p As New Threading.Thread(AddressOf CopieDesFichiers)
                    p.Start
        ListboxFichiersTrouvés.Refresh()
    End Sub

Cependant, l'application n'est pas fluide car je suppose que le listage se fait plus vite que le copiage.

Je ne trouve donc pas de moyen pour contourner le problème, ou alors ce que je pourrais faire c'est dans ma fonction CopieDesFichiers lui indiquer à la place de
For Each fileitem In ListboxFichiersTrouvés.Items juste le dernier item par exemple avec ce bout de code mais il représente une valeur booléenne donc ça ne fonctionne pas :'(

ListboxFichiersTrouvés.SelectedIndex = ListboxFichiersTrouvés.Items.Count - 1
Du coup, l'item est ajouté à la listebox, il est copié, nouvel item trouvé et ajouté à la listbox, l'item et copié ...
Le code se présenterai donc comme ceci :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 Private Sub RemplirListe(ByVal Fichier As IO.FileInfo)
        ListboxFichiersTrouvés.Items.Add(Fichier.FullName)
        ListboxFichiersTrouvés.SelectedIndex = ListboxFichiersTrouvés.Items.Count - 1
 Dim p As New Threading.Thread(AddressOf CopieDesFichiers) 'Copie du DERNIER fichier de la listbox.
                    p.Start
        ListboxFichiersTrouvés.Refresh()
    End Sub