private void OberflächeDeaktivieren(bool Aktivieren) { if (Aktivieren) { CSVPfadSuchenButton.Invoke(new Action <bool>(s => { CSVPfadSuchenButton.Enabled = s; }), true); TestEmailAdresseTextBox.Invoke(new Action <bool>(s => { TestEmailAdresseTextBox.Enabled = s; }), true); if (AdressePrüfen(TestEmailAdresseTextBox.Text)) { TestButton.Invoke(new Action <bool>(s => { TestButton.Enabled = s; }), true); } StartenButton.Invoke(new Action <bool>(s => { StartenButton.Enabled = s; }), true); StatusLabel.Invoke(new Action <string>(s => { StatusLabel.Text = s; }), "Status: 0/0 versendet ETA: 0m 0s"); Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Minimum = s; }), 0); if (!ReferenceEquals(AlleMails, null)) { Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Maximum = s; }), AlleMails.Length); } else { Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Maximum = s; }), 1); } Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Value = s; }), 0); } else { CSVPfadSuchenButton.Invoke(new Action <bool>(s => { CSVPfadSuchenButton.Enabled = s; }), false); TestEmailAdresseTextBox.Invoke(new Action <bool>(s => { TestEmailAdresseTextBox.Enabled = s; }), false); TestButton.Invoke(new Action <bool>(s => { TestButton.Enabled = s; }), false); StartenButton.Invoke(new Action <bool>(s => { StartenButton.Enabled = s; }), false); } }
private void TestButton_Click(object sender, EventArgs e) { try { new Thread(delegate() { OberflächeDeaktivieren(false); var TestEmailAnzahl = 3; var Fehler = string.Empty; if (AlleMails.Length < 3) { TestEmailAnzahl = AlleMails.Length; } if (!AlleMailsÜberprüfen()) { MessageBox.Show("Es sind bei der Überprüfung der Daten Fehler vorgekommen. Diese wurden in folgende Datei geschrieben:\n\n" + ProgrammPfad + @"\EmailAdressenFehler.txt" + "\n\nBitte beheben Sie diese Fehler zuerst. Es wurden keine Emails versandt."); } else { Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Maximum = s; }), TestEmailAnzahl); { Parallel.For(0, TestEmailAnzahl, new ParallelOptions { MaxDegreeOfParallelism = TestEmailAnzahl }, i => { AlleMails[i].TextBearbeiten(this); }); for (int i = 0; i < TestEmailAnzahl; i++) { Fehler = AlleMails[i].EmailSenden(SMTPServerIP, TestEmailAdresseTextBox.Text, true); while (!Fehler.Equals(string.Empty) && (i != TestEmailAnzahl)) { switch (Fehler) { case "1": WarteAnimation(i + 1, TestEmailAnzahl); break; default: MessageBox.Show("Fehler: " + Fehler); i = TestEmailAnzahl; break; } Fehler = AlleMails[i].EmailSenden(SMTPServerIP, TestEmailAdresseTextBox.Text, true); } if (i != TestEmailAnzahl) { StatusLabel.Invoke(new Action <string>(s => { StatusLabel.Text = s; }), string.Format("Status: {0}/{1} versendet", i + 1, TestEmailAnzahl)); Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Value = s; }), i + 1); } } } } OberflächeDeaktivieren(true); GC.Collect(); }).Start(); } catch (Exception ex) { Program.MeldeFehler(ex.Message + "\n" + ex.StackTrace); Environment.Exit(1); } }
private void StartenButton_Click(object sender, EventArgs e) { try { if (!BereitsVersendet || (BereitsVersendet && (MessageBox.Show("Sie haben die Emails schon einmal versendet. Sind Sie sich sicher, dass Sie das noch einmal tun möchten?", "Bestätigung", MessageBoxButtons.YesNo) == DialogResult.Yes))) { new Thread(delegate() { OberflächeDeaktivieren(false); AlleZeiten = new List <long>(); if (!AlleMailsÜberprüfen()) { MessageBox.Show("Es sind bei der Überprüfung der Daten Fehler vorgekommen. Diese wurden in die Datei:\n\n" + ProgrammPfad + @"\EmailAdressenFehler.txt" + "\n\ngeschrieben. Bitte beheben Sie diese Fehler zuerst. Es wurden keine Emails versandt."); } else { var GefundeneFehler = new List <string>(); var Parallelität = 10; if (AlleMails.Length < 10) { Parallelität = AlleMails.Length; } ; Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Minimum = s; }), 0); Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Maximum = s; }), AlleMails.Length); int ProcessedEmailCount = 0; for (int i = 0; i < AlleMails.Length; i++) { var CurWatch = new Stopwatch(); CurWatch.Start(); AlleMails[i].TextBearbeiten(this); CurWatch.Stop(); StatusLabel.Invoke(new Action <string>(s => { StatusLabel.Text = s; }), string.Format("Status: {0}/{1} vorbereitet {2}", ProcessedEmailCount, AlleMails.Length, ETABerechnen(CurWatch.ElapsedMilliseconds / Parallelität, AlleMails.Length - 1 - ProcessedEmailCount))); Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Value = s; }), ProcessedEmailCount); Interlocked.Increment(ref ProcessedEmailCount); if (i % 50 == 0) { GC.Collect(); } } AlleZeiten = new List <long>(); var Watch = new Stopwatch(); var Rückgabewert = string.Empty; for (int i = 0; i < AlleMails.Length; i++) { Watch.Restart(); Rückgabewert = AlleMails[i].EmailSenden(SMTPServerIP, string.Empty, false); while (Rückgabewert == "1") { Rückgabewert = AlleMails[i].EmailSenden(SMTPServerIP, string.Empty, false); WarteAnimation(i + 1, AlleMails.Length); Watch.Reset(); } if (!Rückgabewert.Equals(string.Empty)) { GefundeneFehler.Add("Zeile: " + (i + 2).ToString() + ", Spalte: Empfänger, Wert: " + AlleMails[i].Empfänger + ", Ursache: " + Rückgabewert); } Watch.Stop(); StatusLabel.Invoke(new Action <string>(s => { StatusLabel.Text = s; }), string.Format("Status: {0}/{1} versendet {2}", i + 1, AlleMails.Length, ETABerechnen(Watch.ElapsedMilliseconds, AlleMails.Length - 1 - i))); Ladebalken.Invoke(new Action <int>(s => { Ladebalken.Value = s; }), i + 1); if (i % 30 == 0) { GC.Collect(); } } if (File.Exists(ProgrammPfad + @"\EmailAdressenFehler.txt")) { File.Delete(ProgrammPfad + @"\EmailAdressenFehler.txt"); } if (GefundeneFehler.Count > 0) { File.WriteAllLines(ProgrammPfad + @"\EmailAdressenFehler.txt", GefundeneFehler); MessageBox.Show("Es sind beim Versand der Emails Fehler vorgekommen. Diese wurden in folgende Datei geschrieben:\n\n" + ProgrammPfad + @"\EmailAdressenFehler.txt" + "\n\nAlle anderen Emails wurden erfolgreich verschickt."); } else { MessageBox.Show("Vorgang ohne Fehler abgeschlossen."); } BereitsVersendet = true; } OberflächeDeaktivieren(true); GC.Collect(); }).Start(); } } catch (Exception ex) { Program.MeldeFehler(ex.Message + "\n" + ex.StackTrace); Environment.Exit(1); } }