Bonjour,

Je viens chercher un peu d'aide, car je ne trouve pas de solution à mon problème. J'espère que vous pourrez m'aider

Alors voilà, j'utilise du code qui me permet de récupérer un fichier (openfiledialog), et ensuite je copie ce dernier vers une destination. Le fichier peut faire quelques Ko comme quelques Go. Donc, pendant cette copie, l'appli se freeze, normal.

Le problème se trouve au niveau d'un form que je souhaite afficher, avec une animation, le temps que le fichier se copie.

Cependant, je ne trouve pas de solution car un backgroundworker s'exécute et se stop, et je n'ai pas trouvé de moyen pour lui dire d'attendre que la copie soit terminée. J'ai cherché sur internet, et j'ai trouvé sur msdn un bout de code permettant de créer un thread séparé, mais là, c'est la galère car je ne sais pas m'en servir, et je ne trouve pas d'explications

J'ai du coup essayé de mettre mon code de copie de fichier dans le backgroundworker, au lieu d'y mettre le form pour patienter ... et là, c'est le drame également car j'ai des erreurs lorsque je tente d'accéder à des textbox ou autre de mon thread principal, et idem, j'ai beau chercher, je ne parviens pas à les résoudre. Une histoire de SingleThreadApartment, un truc du genre ...

Bref voici le code actuel :

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
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 Private Sub pic_add_MouseUp(sender As Object, e As MouseEventArgs) Handles pic_add.MouseUp
 
        'Lorsque l'on relâche le clic sur le bouton
        pic_add.Image = My.Resources.Add_norm
        My.Computer.Audio.Play(My.Resources.sound_clic, AudioPlayMode.Background)
 
        'On ouvre la openfiles dialogbox si une console est sélectionnée
        If cmb_console.SelectedIndex <> -1 Then
 
            Using _ofd As New OpenFileDialog
                With _ofd
                    .CheckFileExists = True
                    .CheckPathExists = True
                    .InitialDirectory = "C:\"
                    .Multiselect = True
                    .RestoreDirectory = True
                    If cmb_console.SelectedIndex = 0 Then
                        .DefaultExt = ".a78"
                        .Filter = "Fichier Rom ATARI 7800 (*.a78)|*.a78"
                        .Title = "Ajouter une Rom pour ATARI 7800"
                        cheminconsole = chemin + "\ROMS\ATARI7800\"
 
                        (...)
 
                    End If
 
                    If .ShowDialog() = DialogResult.OK Then
 
                        'On affiche la fenêtre patienter
                        Patienter.Show()
 
                        'On lit les fichiers
                        Dim fichier As String
 
                        For Each fichier In .FileNames
                            'On ajoute les fichiers au répertoire de roms de la console choisie
                            Try
 
                                File.Copy(fichier, cheminconsole & System.IO.Path.GetFileName(fichier), True)
 
                                lst_roms.Items.Clear()
 
                                Dim files = My.Computer.FileSystem.GetFiles(cheminconsole, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
 
                                For Each rom As String In files
                                    resultat = IO.Path.GetFileName(rom)
                                    lst_roms.Items.Add(resultat)
                                Next
 
                            Catch ex As Exception
 
                                ' On gère un éventuel problème
                                MessageBox.Show("Une erreur est survenue lors de l'ajout. Le message est :" & vbCrLf & vbCrLf & ex.Message)
 
                            End Try
 
                        Next fichier
 
                    End If
 
                End With
 
            End Using
 
            Patienter.Close()
 
 
        ElseIf cmb_console.SelectedIndex = -1 Then
            MsgBox("Veuillez d'abord sélectionner une console.", vbOKOnly + vbExclamation, "Ajouter un fichier rom")
        End If
 
    End Sub
Voilà le code complet du bouton, avec la copie de fichier intégrée. Donc dans l'état le form "Patienter" s'affiche mais freeze également, et donc impossible d'y mettre une animation (même thread que la procédure de copie).

Donc l'objectif, pour être clair : réussir à trouver un moyen pour que la copie du fichier sélectionné se fasse en arrière-plan, pendant que le form "Patienter" s'affiche avec une animation, et que ce dernier se ferme bien dès la fin de la copie du fichier

Merci d'avance pour ceux qui se pencheront sur ce problème !

--
Shennong