Bonjour à tous

Je viens de développer une petite application console qui éffectuée une mise à jour sur une base de donnée.

Mon application générale lance un thread qui va s'occuper de mettre à jour la base.

Pendant que ce thread de mise à jour s'éxécute, jai une boucle dans mon programme principe qui affiche "Mise à jour en cours" avec un | / - \ | / - \ | qui tourne.

Dans mon thread, si une erreur SQL se produit, (si je tombe dans un catch,) je souhaiterai afficher sur la console l'erreur. Le problèem est que pendant ce temps là, la console est déja utilisée par mon programme principal.

Je n'ai jamais été confronté à ce soucis, et je ne sais pas trop comment m'orienter.

voici le fonctionnement de mon programme

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
 
 
Classe principale :
 
        public int LaunchUpdate()
        {
 
            // ***********************************************
 
            // Déclaration du thread
		  //  Thread myThread;
 
		    // Instanciation du thread, on spécifie dans le 
		    // délégué ThreadStart le nom de la méthode qui
		    // sera exécutée lorsque l'on appele la méthode
		    // Start() de notre thread.
		    myThread = new Thread(new ThreadStart(UpdateDataBaseNow));
 
		    // *****************************************************
            // *** Lancement du thread ( MISE A JOUR DE LA BASE )
            // *****************************************************
           myThread.Start();
            //******************************************************
 
            // Tant que le thread n'est pas tué
            while (myThread.IsAlive)
            {
                Console.Write("| Mise à jour en cours .... |");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write("/ Mise à jour en cours .... /");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write("- Mise à jour en cours .... -");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write(@"\ Mise à jour en cours .... \");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write("| Mise à jour en cours .... |");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write("/ Mise à jour en cours .... /");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write("- Mise à jour en cours .... -");
                Thread.Sleep(100);
                Console.Clear();
                Console.Write(@"\ Mise à jour en cours .... \");
                Thread.Sleep(100);
                Console.Clear();
            }
 
 
            return 0;
 
        }
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
117
118
119
120
121
122
123
 
private void UpdateDataBaseNow()
        {
 
                string strError;
                string delimiter = "\t";
                int nbLignesTraited = 0;
                int nI = 0;
 
                m_TxtReader = new StreamReader(m_strFileToImport, m_encoding);
                m_TxtReader.ReadLine(); // On lit la première ligne car elle contient les entête de colonnes
 
                m_nNbInsert = 0;
                m_nNbUpdate = 0;
                m_nErrorMaj = 0;
 
                while (m_TxtReader.Peek() >= 0)
                {
 
                    string[] items = m_TxtReader.ReadLine().Split(delimiter.ToCharArray());
 
                    for (int nJ = 0; nJ <= items.Count() - 1; nJ++)
                    {
                        items[nJ] = items[nJ].Replace("'", "''");
 
                    }
 
                    // A ce stade, le tableau "items" contient tous les champs de la ligne courante
 
                    if (items.Count() >= 226)
                    {
 
                        string strCli_Note = items[0] +
                        ((char)13).ToString() + "Géré par : " + items[232] +
                        ((char)13).ToString() + "Tel abgrégé : " + items[161] +
                        ((char)13).ToString() + "Tel : " + items[9] + " Fax : " + items[10] +
                        ((char)13).ToString() + "Adr : " + items[2] +
                        ((char)13).ToString() + "      " + items[7] + " " + items[5] + " " + items[8] +
                        ((char)13).ToString() + "Commercial AI : " + items[28] +
                        ((char)13).ToString() + "Assistance : " + items[145] +
                        ((char)13).ToString() + "Info INQUIERO : " + items[231];
 
                        // ***********************************************
                        // Nous sommes dans les clients/contacts/Logiciels
                        // ***********************************************
 
                        # region Mise à jour des clients
 
                        m_DbCommand_Clients.CommandText = "Select * from " + m_strNomTable_Client + " where clidesig = '" + items[0] + "'";
 
                        OleDbDataAdapter myDbAdapter = new OleDbDataAdapter(m_DbCommand_Clients);
                        DataSet DataSet = new DataSet();
                        try
                        {
                            myDbAdapter.Fill(DataSet, "Vars");
                            DataTable dt = DataSet.Tables[0];
 
                            if (dt.Rows.Count > 0)
                            {
                                //************************************************
                                // La fiche CLIENT existe déja, on va la modifier
                                //************************************************
                                foreach (DataRow dr in dt.Rows)
                                {
 
                                    // Pour chaque enregistrement trouvés, on va mettre à jour le client
                                    m_DbCommand_Clients.CommandText = "Update " + m_strNomTable_Client + " SET cliadlig1 = '" + items[2] + "'," +
                                    "cliadlig2 = '" + items[3] + "', cliadlig3 = '" + items[4] + "', cliadville = '" + items[5] + "'," +
                                    "cliadcpost = '" + items[7] + "', cliadpays = '" + items[8] + "', cliadtel= '" + items[9] + "'," +
                                    "cliadfax = '" + items[10] + "', clivendeur = '" + items[28] + "', cliactiv= '" + items[29] + "'," +
                                    "clieffect ='" + items[30] + "', clinaf = '" + items[43] + "', cliassist = '" + items[145] + "'," +
                                    "clicode='" + items[164] + "',cliregroup = '" + items[229] + "'" + ",clinquiero = '" + items[231] + "',"
                                    + "clirev_pho='" + items[102] + "',cligerepar='" + items[232] + "', clinotes ='" + strCli_Note + "'" +
                                    " WHERE clidesig = '" + @items[0] + "'";
 
 
                                    nbLignesTraited = m_DbCommand_Clients.ExecuteNonQuery();
 
                                    if (nbLignesTraited == 0)
                                    {
                                        m_nErrorMaj++;
                                    }
                                    else
                                    {
                                        m_nNbUpdate += nbLignesTraited;
                                    }
 
                                }
                            }
                            else
                            {
                                //************************************************
                                // La fiche CLIENT n'existe pas, on va la créer
                                //************************************************
                                m_DbCommand_Clients.CommandText = "Insert into " + m_strNomTable_Client + " (clidesig,cliadlig1,cliadlig2,cliadlig3,cliadville,cliadcpost," +
                                "cliadpays,cliadtel,cliadfax,clivendeur,cliactiv,clieffect,clinaf,cliassist,clicode,cliregroup,clirev_pho, cligerepar,cliinfomnt,cliinfolib," +
                                "clitelabrg,clinquiero,clinotes) VALUES (" +
                                "'" + items[0] + "'" + "," + "'" + items[2] + "'" + "," + "'" + items[3] + "'" + "," + "'" + items[4] + "'" + "," + "'" + items[5] + "'" +
                                "," + "'" + items[7] + "'" + "," + "'" + items[8] + "'" + "," + "'" + items[9] + "'" + "," + "'" + items[10] + "'" + "," + "'" + items[28] + "'" +
                                "," + "'" + items[29] + "'" + "," + "'" + items[30] + "'" + "," + "'" + items[43] + "'" + "," + "'" + items[145] + "'" + "," + "'" + items[164]
                                + "'" + "," + "'" + items[229] + "'" + "," + "'" + items[102] + "'" + "," + "'" + items[232] + "'" + "," + "' '" + "," + "' '" + "," + "' '" +
                                "," + "'" + items[231] + "'" + "," + "'" + strCli_Note + "'" + ")";
 
                                nbLignesTraited = m_DbCommand_Clients.ExecuteNonQuery();
 
                                if (nbLignesTraited == 0)
                                {
                                    m_nErrorMaj++;
                                }
                                else
                                {
                                    m_nNbInsert++;
                                }
 
                            }
 
                        }
                        catch (Exception ex)
                        {
                            strError = "Erreur : " + ex.Message;
                            maConsole.AfficheMessage(strError);
                        }
}
Dans le seconde bloc [code], regardez à la ligne 121, c'est ici que je souhaite afficher le message d'erreur sur la console et en arrêtant an boucle qui affiche "mise à jour en cours". Pour infos, maConsole.AffichageMessage() est une petite classe qui utilise console.writeline.

J'éspère ne pas avoir été assez clair dans mon explication

Auriez vous des pistes pour m'aider ?

Je vous remercie tous d'avance

Bien cordialement,

Nixeus