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 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
| public void ThreadProc()
{
try
{
// donne le temps saisis ainsi que le mail dans une variable !! attention !! guillemet important pour fonctionnement.
string Info = " " + temps.Text + " " + text_mail.Text + " ";
// Execute le script shell en y ajoutant les arguments en variable.
var ps1File = @"C:\Temp\2.ps1";
var startInfo = new ProcessStartInfo(@"path\to\Powershell.exe", @"""2.ps1""")
{
FileName = "powershell.exe",
Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \"{ps1File}\"{Info}\"",
UseShellExecute = true
};
// Execute le script grace a la commande Process puis lance le contenu de startInfo.
Process.Start(startInfo);
// Conversion des minutes saisi en seconde.
int Convert = int.Parse(temps.Text);
double TSeconde = Convert * 60;
// défini le nombre de pas de la progressbar en fonction du temps et de la maximum de la progressbar.
double step = TSeconde / 100;
// Initialisation de la progressbar du maximum à 100.
progress_bar.Maximum = 100;
// Initialisation de la valeur de la progressbar à 0.
progress_bar.Value = 0;
// crée une collection "counter".
var counter = new List<int>();
//initialise i à 1.
int i = 1;
//initialise ok à vrai.
bool ok = true;
// Crée une variable pour compter le nombre de ligne et l'initialise a 0.
counter.Add(0);
// Renvoie au format boolean l'état de la connexion (true or false) si on a internet = true, sinon false
int Desc;
bool Connexion = InternetGetConnectedState(out Desc, 0);
int nbLignes = 0;
threadstart = true;
while (i < 100 && ok && threadstart == true && Connexion == true)
{
if (threadstart == true)
{
notificationIcon = true;
// l'execution ce met en pause pendant le nombre contenu dans la variable step en seconde fois 1000 (1 seconde) (exemple : 0.6 * 1 = step = 0,6).
Thread.Sleep((int)(step * 1000));
// Compte le nombre de ligne du fichier de log et les rajoute a la variable nbLignes.
// int nbLignes = File.ReadLines(@"c:\ju\temp.log").Count();
using (FileStream fs = new FileStream(@"C:\ju\temp.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs))
{
// Lit tout le contenue du fichier (ReadToEnd)
// Divise en autant délément (+1) qu'il y a de retour ligne (Split(new char[] { '\n' }))
nbLignes = sr.ReadToEnd().Split(new char[] { '\n' }).Count();
}
}
// ajoute a la collection counter la variable nbLignes
counter.Add(nbLignes);
// Si le temps entre chaque seconde est supérieur ou égal a 1.2.
if (step >= 1.5)
{
// Si le nombre de ligne est identique donc pas de nouvel ligne, arrête la progression.
if (counter[i] == counter[i - 1] || Connexion == false || threadstart == false)
{
// Affiche la fenetre et la met a sa taille normal si elle a été réduit au préalable.
this.Show();
this.WindowState = FormWindowState.Normal;
// la variable ok devient fausse.
ok = !ok;
// la bar de progression revient a 0.
progress_bar.Value = 0;
}
// sinon continue la progression
else
{
// la progressbar gagne la valeur de i (while i < 100) i++.
progress_bar.Value = i;
lab_pourcent.Text = i + "%";
notifyIcon1.Text = "Cogiping - " + i + "%";
i++;
}
}
// Sinon on execute le programme une fois sur 2 a chaque passage dans la boucle.
else
{
if (i % 2 == 0)
{
// Si le nombre de ligne est identique donc pas de nouvel ligne, arrête la progression.
if (counter[i] == counter[i - 2])
{
// Affiche le form si il a été réduit au préalable ainsi que dans la barre de tache
this.Show();
this.WindowState = FormWindowState.Normal;
// la variable ok devient fausse.
ok = !ok;
// la bar de progression revient a 0.
progress_bar.Value = 0;
}
// Sinon on continue la progression
else
{
// la progressbar gagne la valeur de i (while i < 100) i++.
progress_bar.Value = i;
lab_pourcent.Text = i + "%";
notifyIcon1.Text = "Cogiping - " + i + "%";
i++;
}
}
// Sinon on continue la progression.
else
{
// la progressbar gagne la valeur de i (while i < 100) i++.
progress_bar.Value = i;
lab_pourcent.Text = i + "%";
notifyIcon1.Text = "Cogiping - " + i + "%";
i++;
}
}
// Si la progressbar atteind 99, elle passe automatiquement a 100 et si au préalable la fenetre était réduite une notification apparait ainsi que la fenetre .
// et l'icon dans la bar de tache.
if (progress_bar.Value == 99)
{
notifyIcon1.ShowBalloonTip(1000, "Cogiping", "Le test est presque terminé !", ToolTipIcon.Info);
this.Show();
this.WindowState = FormWindowState.Normal;
progress_bar.Value = 100;
lab_pourcent.Text = "100%";
}
// Si la progressbar est à 100.
if (progress_bar.Value == 100)
{
// On cache la progressbar et le text du pourcentage et le pourcentage
progress_bar.Hide();
lab_pourcent.Hide();
lab_pourtext.Hide();
// remplace la valeur de lab pourcent par 0
lab_pourcent.Text = "0%";
// On montre le message "Reussis".
lab_complete.Show();
// On affiche un message de reussite.
MessageBox.Show("L'analyse s'est bien effectuée, veuillez patienter pour la confirmation de l'envoi du mail.");
// On cache l'icon dans la barre de tache.
notifyIcon1.Visible = false;
// On initialise la valeur de la progressbar à 0.
progress_bar.Value = 0;
Thread.Sleep(4500);
// Si le threadstart == false donc si on arrête le thread avec le bouton annuler, on met la progressbar a 0 et le lab pourcent également.
if (threadstart == false)
{
progress_bar.Value = 0;
lab_pourcent.Text = "0%";
notifyIcon1.Visible = false;
// On remet la variable notificationIcon a false afin de ne pas afficher l'icon quand l'utilisateur réduit la.
notificationIcon = false;
// On affiche la progressbar et le text du pourcentage et le pourcentage
lab_pourtext.Show();
progress_bar.Show();
lab_pourcent.Show();
// On dévérouille l'option qui permettait de ne pas sélectionner des items.
temps.Enabled = true;
text_mail.Enabled = true;
button1.Enabled = true;
MessageBox.Show("Le mail à " + text_mail.Text + " ne s'est pas envoyé.\nVeuillez appuyer sur le bouton \"Play\" pour recommencer.");
}
else
{
// On affiche un message de confirmation du mail.
MessageBox.Show("Le mail à " + text_mail.Text + " s'est bien envoyé !");
// On cache le message de reussite.
lab_complete.Hide();
// On affiche la progressbar et le text du pourcentage et le pourcentage
lab_pourtext.Show();
progress_bar.Show();
lab_pourcent.Show();
// On dévérouille l'option qui permettait de ne pas sélectionner des items.
temps.Enabled = true;
text_mail.Enabled = true;
button1.Enabled = true;
}
// On remet la variable notificationIcon a false afin de ne pas afficher l'icon quand l'utilisateur réduit la.
notificationIcon = false;
}
// Si l'utilisateur n'a plus de connexion on affiche un message d'erreur
if (Connexion == false)
{
MessageBox.Show("CODE 1000\nUne erreur s'est produite dans l'analyse\nIl n'y a plus de connexion Internet, veuillez appuyer sur le bouton \"Annuler\" et vous reconnectez a Internet\nSi le problème persiste contactez Cogidis.");
notifyIcon1.Visible = false;
// Tue le process en cours en tache de fond (powershell).
Process[] processList = Process.GetProcessesByName("powershell");
foreach (Process p in processList)
{
p.Kill();
}
notifyIcon1.Visible = false;
}
// Si l'utilisateur arrête le thread on affiche un message de confirmation
else if (threadstart == false)
{
MessageBox.Show("CODE 2000\nL'analyse s'est bien arrêtée\nPour recommencer appuyer sur le bouton \"Démarrer\".");
notifyIcon1.Visible = false;
Process[] processList = Process.GetProcessesByName("powershell");
foreach (Process p in processList)
{
p.Kill();
}
notifyIcon1.Visible = false;
}
// Si le le ping ne s'actualise plus dans le fichier de log on affiche un message d'erreur
else if (!ok)
{
MessageBox.Show("CODE 3000\nUne erreur s'est produite dans l'analyse\nLe test ne s'actualise plus, veuillez appuyer sur le bouton \"Annuler\" et recommencez.");
// Tue le process en cours en tache de fond (powershell).
Process[] processList = Process.GetProcessesByName("powershell");
foreach (Process p in processList)
{
p.Kill();
}
notifyIcon1.Visible = false;
}
}
} |
Partager