Salut à tous.

Me revoilà avec mon application Winform

Aujourd'hui j'ai constaté que quand l'application se ferme, elle se met en processus d'arrière plan.

Voici le cheminement de connexion à la BDD lors de l'ouverture et la fermeture de l'application :

Connexion BDD
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
 
/// <summary>
        /// Arrête la connexion à la fermeture du dashbord
        /// </summary>
        public static void KillConnexion()
        {
            zCnx.Close();
            zCnx.Dispose();
            zCnx = null;
        }
 
public static Boolean bOpenConnection()
        {
            try
            {
                if(zCnx == null)
                {
                    // Test : Mode débug actif ?
                    //bool bDebug = System.Diagnostics.Debugger.IsAttached;
 
                    bool bDebug = false;
 
#if DEBUG
                    bDebug = true;
#endif
 
                    // Test : En mode débug ?
                    if (bDebug)
                    {
                        zCnx = new MySqlConnection("Persist Security Info=False;Server="";Database="";Uid="";Pwd=""");
                        zCnx.Open();
                    }
                    else
                    {
                        // Mise à jour du serveur
                        MajServeurs();
                        // prod
                        zCnx = new MySqlConnection("Persist Security Info=False;Server=" + zsServeurMySql + ";Database="";Uid="";Pwd=""");
                        zCnx.Open();
                    }
 
 
                } // Test : En mode débug ?
 
 
                return true;
            }
            catch (Exception e)
            {
                cl_Logger.writeError(WindowsIdentity.GetCurrent().Name, "cl_DbConnection", "openConnection", e);
                // Erreur
                return false;
            }
        }
Chargement
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
public partial class frm_Chargement : Form
    {
        public frm_Chargement()
        {
            InitializeComponent();
            this.Text = "Chargement de l'application - " + cl_Configuration.numeroVersion;
        }
 
        /// <summary>
        /// Lorsque la fenêtre s'affiche.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frm_Chargement_Shown(object sender, EventArgs e)
        {
            //La fenêtre de chargement ne charge que les données nécessaire à l'ouverture de l'application,
            //le reste des données est chargé de façon asynchrone
            Thread t = new Thread(Initialisation);
            t.Start();
            while (t.IsAlive)
            {
                Application.DoEvents();
            }
            this.Close();
        }
 
        /// <summary>
        /// Méthode permettant de récupérer les informations nécessaire à l'ouverture de l'application
        /// </summary>
        public void Initialisation()
        {
 
            //Récupérer l'indentifiant session
            String strNameWindows = WindowsIdentity.GetCurrent().Name;
 
            //Récupérer le nombre de caractère qu'il y a jusqu'au nom de l'utilisateur
            int nCaractere = strNameWindows.IndexOf(@"\");
 
            // Test : Ouverture de la connexion à la base de données
            if (!cl_DbConnection.bOpenConnection()) 
            {
                MessageBox.Show("Connexion au serveur impossible");
                // Fermeture de l'application
                Environment.Exit(0);
            } // Test : Ouverture de la connexion à la base de données
 
            //Déclaration des objets
            cl_CollaborateurBUS userbus = new cl_CollaborateurBUS();
            cl_PrevisionBUS PreviBUS = new cl_PrevisionBUS();
 
            //Variable qui va contenir le login
            string strName = null;
 
            //exemple : kevinpl
            strName = strNameWindows.Substring(nCaractere + 1, strNameWindows.Length - nCaractere - 1);
            //strName = "alaeddine";
            // Test : Mode débug actif ?
            if (System.Diagnostics.Debugger.IsAttached)
            {
                //strName = "pierrot";
                //strName = "Aurelienb";
                //strName = "fabienne";
                //strName = "alaeddine";
            } // Test : Mode débug actif ?
 
            // si le nom de domaine est ISILAND
            if (strNameWindows.Substring(0, nCaractere) == "ISILAND" )
            {
                //si il n'y a pas d'utilisateur dont le login commence par le nom passé en parametre 
                if (userbus.checkDoublon(strName))
                {
                    //Récupérer l'objet utilisateur
                    cl_Collaborateur.CurrentUser = userbus.getUserByLogin(strName);
                }
            }
            else
            {
                MessageBox.Show("Le nom de domaine est incorrecte");
                // Fermeture de l'application
                Environment.Exit(0);
            }
        }
 
        /// <summary>
        /// Récupère les informations supplémentaires (par ex. les droits de l'utilisateur) à partir des webservices
        /// </summary>
        public void Rafraichir()
        {
            cl_CollaborateurBUS UserBUS = new cl_CollaborateurBUS();
            cl_PrevisionBUS PreviBUS = new cl_PrevisionBUS();
 
            List<cl_Collaborateur> liste = new List<cl_Collaborateur>();
 
            //Vérifie si l'utilisateur est RPA ou non
            cl_Collaborateur.RPA = UserBUS.checkRPA(UserBUS.getUserCodeCollab(cl_Collaborateur.CurrentUser.idcollaborateur).CodeCollab);
 
            //Récupère la liste des collaborateurs que l'utilisateur courant peut affecter
            string[] strListe = UserBUS.getListeCollaborateurAutorise(UserBUS.getUserCodeCollab(cl_Collaborateur.CurrentUser.idcollaborateur).CodeCollab);
 
            //Insère dans une liste static des objets utilisateur pouvant être affecter par l'utilisateur courant
            foreach (string strCodeCollab in strListe)
            {
                liste.Add(UserBUS.getUserAutorise(strCodeCollab));
            }
 
            //liste des utilisateurs dont l'utilisateur courant à la responsabilité
            cl_Collaborateur.LstUsers = liste;
 
            //Actualiser la liste des jours non-travaillés de la période allant de trois mois auparavavant jusqu' a trois mois après la date actuelle
            PreviBUS.setListJourNonTravaille();
 
            //Actualiser la liste des prévisions de temps partiel de la période allant de trois mois auparavant jusqu'a trois mois apres la date actuelle.
            PreviBUS.setLstPrevisionTpsPartiel();
 
        }
Lors de la fermeture de l'application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
            cl_DbConnection.KillConnexion();
        }
Et la classe program
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
 
static class Program
    {
        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
 
        static void Main()
        {
            // French (fr)
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
 
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
 
            frm_Chargement frmCharg = new frm_Chargement();
            //L'affichage de la fenêtre de chargement entraîne le chargement des données
            frmCharg.Show();
 
            // Chargement des droits du collaborateur
            Application.DoEvents();
            frmCharg.Rafraichir();
 
            //Si l'utilisateur est RPA, ouverture d'une fenêtre responsable
            if (cl_Collaborateur.RPA)
            {
                frm_Responsable frmResponsable = new frm_Responsable();
                frmResponsable.Show();
                //Application.Run(new frm_Responsable());
            }
            //Sinon, actualisation du plan de charge de la fenêtre collaborateur
            else
            {
                frm_Collaborateur frmCollab = new frm_Collaborateur();
                //Affichage d'une fenêtre collaborateur
                frmCollab.Show();
            }
 
            //Permet à l'application de continuer de tourner à la fin des traitements
            Application.Run();
 
        }
    }
Je n'ai absolument aucune idée de pourquoi ça peut faire ça !
Merci d'avance