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
Partager