c# BackgroundWorker

xlon

Mitglied
Ich bin gerade dabei ein Programm zuschreiben welches ein eine IP addresse einliest. Auf diese IP sollen 5 Ping geschickt werden. Nachdem Ersten Ping soll dem Benutzer Gezeigt werden (Mit einer TextBox die Rot oder Grün wird) ob der Ping erfolgreich war...dann soll der Zweite Ping ausgeführt werden und dann soll in der zweiten TextBox wieder angezeigt werden ob der Ping erfolgreich war...insgesamt gibt es 5pings mit 5 Textboxen....


Das Programm Funktioniert auch...ABER wenn ich es bewege bleibt das Programm hängen...

also habe ich mal rumgeguckt...und mir ist der BackgroundWorker ins augegefallen....

habe meine Pings in den BackgroundWorker eingefügt...

das Problem ist...die try catch funktion läuft solange bis was im fenster angezeigt werden soll...also bis zum ersten ping wo er dann grün bzw. rot werden soll...dann bricht sie ab und geht in die catch funktion.

hier mal mein code

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.NetworkInformation;

namespace PingTool
{
    public partial class Form1 : Form
    {
        String add_1 = "";
        String status1 = "ok";

        long p1_1, p1_2, p1_3, p1_4, p1_5, p1_g;

        int sleeptime = 2000;
        int maxtime = 50;

        BackgroundWorker bw = new BackgroundWorker();
        

        public Form1()
        {
            InitializeComponent();
            
        bw.WorkerSupportsCancellation = true;
        bw.WorkerReportsProgress = true;
        bw.DoWork +=
        new DoWorkEventHandler(bw_DoWork);
        bw.ProgressChanged +=new ProgressChangedEventHandler(bw_ProgressChanged);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
        }
        public void ping1()
        {
            if (checkBox1.Checked == true)
            {


                add_1 = textBox1.Text;

                try
                {
                    int errorcunt1 = 0;

                    Ping p1 = new Ping();
                    PingOptions po1 = new PingOptions();
                    
                    //PingReply pingReply1 = p1.Send(add_1);

                    ad_p1_1.BackColor = Color.White;
                    ad_p1_1.Text = "";
                   // this.Refresh();
                    PingReply pingReply1_1 = p1.Send(add_1);
                    
                    p1_1 = pingReply1_1.RoundtripTime;
                    if (pingReply1_1.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_1.BackColor = Color.Red;
                        ad_p1_1.Text = "-";

                        ad_p1_u.Text = DateTime.Now.ToString();
                      //  this.Refresh();


                        
                    }
                    else
                    {
                        ad_p1_1.BackColor = Color.Green;
                        ad_p1_1.Text = p1_1.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }



                    ad_p1_2.BackColor = Color.White;
                    ad_p1_2.Text = "";
                   // this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_2 = p1.Send(add_1);
                    p1_2 = pingReply1_2.RoundtripTime;
                    if (pingReply1_2.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_2.BackColor = Color.Red;
                        ad_p1_2.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                     //   this.Refresh();
                    }
                    else
                    {
                        ad_p1_2.BackColor = Color.Green;
                        ad_p1_2.Text = p1_2.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                       // this.Refresh();
                    }

                    ad_p1_3.BackColor = Color.White;
                    ad_p1_3.Text = "";
                   // this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_3 = p1.Send(add_1);
                    p1_3 = pingReply1_3.RoundtripTime;
                    if (pingReply1_3.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_3.BackColor = Color.Red;
                        ad_p1_3.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                     //   this.Refresh();
                    }
                    else
                    {
                        ad_p1_3.BackColor = Color.Green;
                        ad_p1_3.Text = p1_3.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                       // this.Refresh();
                    }


                    ad_p1_4.BackColor = Color.White;
                    ad_p1_4.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_4 = p1.Send(add_1);
                    p1_4 = pingReply1_4.RoundtripTime;
                    if (pingReply1_4.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_4.BackColor = Color.Red;
                        ad_p1_4.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                      //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_4.BackColor = Color.Green;
                        ad_p1_4.Text = p1_4.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }


                    
                    ad_p1_5.BackColor = Color.White;
                    ad_p1_5.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    
                    PingReply pingReply1_5 = p1.Send(add_1);
                    p1_5 = pingReply1_5.RoundtripTime;
                    if (pingReply1_5.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_5.BackColor = Color.Red;
                        ad_p1_5.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                      //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_5.BackColor = Color.Green;
                        ad_p1_5.Text = p1_5.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }



                    p1_g = (p1_1 + p1_2 + p1_3 + p1_4 + p1_5) / 5;

                    if ((errorcunt1 <2))
                    {
                        status1 = "ok";
                    }


                    if ((errorcunt1 >=2) && (((p1_g == 0) || p1_g >= maxtime)))
                    {

                        if (status1 == "ok")
                        {


                            System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
                            mail.Host = "IP";
                            mail.Send("EMAIL@web.de", "EMAIL@web.de", "Fehlermeldung PingTool", "Die Adresse " + add_1 + " hat eine Fehlermeldung! Bitte Überprüfen\nDurchschnittantwortzeit beträgt: " + p1_g + "ms");

                            status1 = "gesendet";
                        }
                    }
                }
                catch
                {
                    if (status1 == "ok")
                    {


                        System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
                        mail.Host = "IP";
                        mail.Send("EMAIL@web.de.de", "EMAIL@web.de", "Fehlermeldung PingTool", "Die Adresse " + add_1 + " hat eine Fehlermeldung! Bitte Überprüfen\nDurchschnittantwortzeit beträgt: " + p1_g + "ms");

                        status1 = "gesendet";
                    }
                }
            }
        }
 private void button1_Click(object sender, EventArgs e)
        {
            if (bw.IsBusy != true)
            {
                bw.RunWorkerAsync();
            }
        }

 private void button2_Click(object sender, EventArgs e)
        {
            if (bw.WorkerSupportsCancellation == true)
            {
                bw.CancelAsync();
            }

            
        }


private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            

            ping1();

        }

   public void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");

            
        }

        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if ((e.Cancelled == true))
            {
                this.tbProgress.Text = "Canceled!";
            }

            else if (!(e.Error == null))
            {
                this.tbProgress.Text = ("Error: " + e.Error.Message);
            }

            else
            {
                this.tbProgress.Text = "Done!";
            }
        }


vllt kann mir ja jemand helfen...

vielen dank im vorraus
 
Hast du dir denn schon mal die Exception angeschaut?
Welche kommt? Was steht drin? Ggf mit InnerException falls vorhanden.
 
und zwar sagt er mir :

Code:
$exception	{"Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ad_p1_1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."}	System.Exception {System.InvalidOperationException}
 
Das Problem ist das die Controls alle über den Main THread (GUI Thread) laufen, deine Ping Methode aber über den Thread des BackgroundWorkers.
Deshalb auch der unerlaubte Zugriff.

Per Control.Invoke könntest könntest du jetzt zum Beispiel wieder auf eine Methode deines GUI Threads drauf zu greifen.

Und noch ein kleiner Zusatz, im BackgroundWorker brauchst du kein try-catch, wenn eine Exception auftritt steht diese im RunWorkerComplete EventArgs (Error).
 
hi, danke für deine antwort.

mir wurde empfholen den Backgroundwoker rauszutun..und mit ´"normalen" threads zuarbeiten...

es sieht jetzt folgendermaßen aus:

Code:
namespace PingTool
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        String add_1 = "";
        String status1 = "ok";

        long p1_1, p1_2, p1_3, p1_4, p1_5, p1_g;
     

        int sleeptime = 2000;
        int maxtime = 50;

       
        

        public Window1()
        {
            InitializeComponent();

            
        }

        private void bnt_Close_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        public void ping1()
        {

            if (checkBox1.IsChecked == true)
            {

                add_1 = textBox1.Text;

                try
                {
                    int errorcunt1 = 0;

                    Ping p1 = new Ping();
                    PingOptions po1 = new PingOptions();

                    //PingReply pingReply1 = p1.Send(add_1);

                    ad_p1_1.Background = Brushes.White;
                    ad_p1_1.Text = "";

                    this.Show();
                    PingReply pingReply1_1 = p1.Send(add_1);
                    p1_1 = pingReply1_1.RoundtripTime;
                    if (pingReply1_1.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_1.Background = Brushes.Red;
                        ad_p1_1.Text = "-";

                        ad_p1_u.Text = DateTime.Now.ToString();
                        //   this.Refresh();

                        this.UpdateLayout();

                    }
                    else
                    {
                        ad_p1_1.Background = Brushes.Green;
                        ad_p1_1.Text = p1_1.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //  this.Refresh();

                    }



                    ad_p1_2.Background = Brushes.White;
                    ad_p1_2.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_2 = p1.Send(add_1);
                    p1_2 = pingReply1_2.RoundtripTime;
                    if (pingReply1_2.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_2.Background = Brushes.Red;
                        ad_p1_2.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_2.Background = Brushes.Green;
                        ad_p1_2.Text = p1_2.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }

                    ad_p1_3.Background = Brushes.White;
                    ad_p1_3.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_3 = p1.Send(add_1);
                    p1_3 = pingReply1_3.RoundtripTime;
                    if (pingReply1_3.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_3.Background = Brushes.Red;
                        ad_p1_3.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_3.Background = Brushes.Green;
                        ad_p1_3.Text = p1_3.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }


                    ad_p1_4.Background = Brushes.White;
                    ad_p1_4.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);
                    PingReply pingReply1_4 = p1.Send(add_1);
                    p1_4 = pingReply1_4.RoundtripTime;
                    if (pingReply1_4.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_4.Background = Brushes.Red;
                        ad_p1_4.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_4.Background = Brushes.Green;
                        ad_p1_4.Text = p1_4.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }



                    ad_p1_5.Background = Brushes.White;
                    ad_p1_5.Text = "";
                    //this.Refresh();
                    System.Threading.Thread.Sleep(sleeptime);

                    PingReply pingReply1_5 = p1.Send(add_1);
                    p1_5 = pingReply1_5.RoundtripTime;
                    if (pingReply1_5.Status.ToString() != "Success")
                    {
                        errorcunt1++;
                        ad_p1_1.Background = Brushes.Red;
                        ad_p1_5.Text = "-";
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //  this.Refresh();
                    }
                    else
                    {
                        ad_p1_5.Background = Brushes.Green;
                        ad_p1_5.Text = p1_5.ToString();
                        ad_p1_u.Text = DateTime.Now.ToString();
                        //this.Refresh();
                    }



                    p1_g = (p1_1 + p1_2 + p1_3 + p1_4 + p1_5) / 5;

                    if ((errorcunt1 < 2))
                    {
                        status1 = "ok";
                    }


                    if ((errorcunt1 >= 2) && (((p1_g == 0) || p1_g >= maxtime)))
                    {

                        if (status1 == "ok")
                        {


                            System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
                            mail.Host = "TEST";
                            mail.Send("Test@web.de", "Test@web.de", "Fehlermeldung PingTool", "Die Adresse " + add_1 + " hat eine Fehlermeldung! Bitte Überprüfen\nDurchschnittantwortzeit beträgt: " + p1_g + "ms");

                            status1 = "gesendet";
                        }
                    }
                }
                catch
                {
                    if (status1 == "ok")
                    {


                        System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
                        mail.Host = "TEST";
                        mail.Send("Test@web.de", "Test@web.de", "Fehlermeldung PingTool", "Die Adresse " + add_1 + " hat eine Fehlermeldung! Bitte Überprüfen\nDurchschnittantwortzeit beträgt: " + p1_g + "ms");

                        status1 = "gesendet";
                    }
                }
            }
        }


        public void bnt_Start_Click(object sender, RoutedEventArgs e)
        {
            
           

            Thread threadping1 = new Thread(new ThreadStart(ping1));

            threadping1.Start();

            MessageBox.Show("hallo");
            
        }
    }
}

das Problem ist jetzt hierbei das er direkt am anfang die add_1 nicht erkennen kann...bzw die checkbox auch nicht...wahrscheinlich alles was auf der GUI zusehen ist kann er in dem Thread nicht verarbeiten...

du hast was von Control.Invoke erzählt..

wie setzte ich das um?...das er bei jedem ping seine jeweilige Text box rot oder grün macht...

danke im vorraus!
 
Ein sehr simples reduziertes Beispiel:
Code:
// kann im Thread aufgerufen werden:
textBoxInfo.Invoke(new MethodSetInfoText(SetInfoText), new Object[] { "Blabla"});
// dazu definieren:
protected delegate void MethodSetInfoText(String text);
void SetInfoText(String text)
{
    textBoxInfo.Text = text;
}
In der Void-Methode kannst du natürlich mehr veranstalten, z.b. Farbe ändern.
 
Zuletzt bearbeitet:
weil bei mir sagt er jetzt


"PingTool.Form1.MethodSetInfoText(string)" ist ein(e) "Methode", wird aber wie ein(e) "Typ" verwendet."
 
hallo, ich habe leider immer noch ein kleines Problem damit...

ich habe es jetzt folgender maßen gemacht

Code:
namespace PingTool
{
    public partial class Form1 : Form
    {
    String add_1 = "", add_2="", add_3="", add_4="", add_5="", add_6="", add_7="", add_8="";
    String status1 = "ok", status2 = "ok", status3 = "ok", status4 = "ok", status5 = "ok", status6 = "ok", status7 = "ok", status8 = "ok";

    int errorcunt1, errorcunt2, errorcunt3, errorcunt4, errorcunt5, errorcunt6, errorcunt7, errorcunt8;

    private long counterping1 = 0, counterping2 = 0, counterping3 = 0, counterping4 = 0, counterping5 = 0, counterping6 = 0, counterping7 = 0, counterping8 = 0;
    private int counter = 0;

    PingTool.Properties.Settings mySettings = null;


    long p1_1, p1_2, p1_3, p1_4, p1_5, p1_g;
    long p2_1, p2_2, p2_3, p2_4, p2_5, p2_g;
    long p3_1, p3_2, p3_3, p3_4, p3_5, p3_g;
    long p4_1, p4_2, p4_3, p4_4, p4_5, p4_g;
    long p5_1, p5_2, p5_3, p5_4, p5_5, p5_g;
    long p6_1, p6_2, p6_3, p6_4, p6_5, p6_g;
    long p7_1, p7_2, p7_3, p7_4, p7_5, p7_g;
    long p8_1, p8_2, p8_3, p8_4, p8_5, p8_g;

   

    int sleeptime = 2000;
    //int maxtime = 50;

    BackgroundWorker bw = new BackgroundWorker();


    public Form1()
    {

        
    InitializeComponent();

    bw.WorkerSupportsCancellation = true;
    bw.WorkerReportsProgress = true;
    bw.DoWork += new DoWorkEventHandler(bw_DoWork);

    bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
    }
    
        private void Form1_Load(object sender, EventArgs e)
    {
        LoadConfigSettings();

        this.Text = ProductName + " " + ProductVersion;

   
    }

    #region adresse1
    public void ping1()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(ping1));
            return;
        }

        if (checkBox1.Checked == true)
        {


            add_1 = textBox1.Text;

            try
            {
            int errorcunt1 = 0;

            Ping p1 = new Ping();
            PingOptions po1 = new PingOptions();

            //PingReply pingReply1 = p1.Send(add_1);

            ad_p1_1.BackColor = Color.White;
            ad_p1_1.Text = "";
            ad_p1_1.Refresh();

            PingReply pingReply1_1 = p1.Send(add_1);

             p1_1 = pingReply1_1.RoundtripTime;
            if (pingReply1_1.Status.ToString() != "Success")
            {
                errorcunt1++;
                ad_p1_1.BackColor = Color.Red;
                ad_p1_1.Text = "-";

                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_1.Refresh();



            }
            else
            {
                ad_p1_1.BackColor = Color.Green;
                ad_p1_1.Text = p1_1.ToString();
                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_u.Refresh();
            }
            }
            catch(Exception ex)
            {
            MessageBox.Show(ex.ToString());
            }
            counterping1++;
            tbProgress.Text = counterping1.ToString();
        }
    }
    public void ping2()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(ping2));
            return;
        }

        if (checkBox1.Checked == true)
        {

            Ping p1 = new Ping();
            PingOptions po1 = new PingOptions();

            ad_p1_2.BackColor = Color.White;
            ad_p1_2.Text = "";
            ad_p1_2.Refresh();
            System.Threading.Thread.Sleep(sleeptime);
            PingReply pingReply1_2 = p1.Send(add_1);
            p1_2 = pingReply1_2.RoundtripTime;
            if (pingReply1_2.Status.ToString() != "Success")
            {
                errorcunt1++;
                ad_p1_2.BackColor = Color.Red;
                ad_p1_2.Text = "-";
                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_u.Refresh();
            }
            else
            {
                ad_p1_2.BackColor = Color.Green;
                ad_p1_2.Text = p1_2.ToString();
                ad_p1_u.Text = DateTime.Now.ToString();
               //  this.Refresh();
            }
            counterping1++;
            tbProgress.Text = counterping1.ToString();
        }
    }
    public void ping3()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(ping3));
            return;
        }

        if (checkBox1.Checked == true)
        {

            Ping p1 = new Ping();
            PingOptions po1 = new PingOptions();

            ad_p1_3.BackColor = Color.White;
            ad_p1_3.Text = "";
            ad_p1_3.Refresh();
            System.Threading.Thread.Sleep(sleeptime);
            PingReply pingReply1_3 = p1.Send(add_1);
            p1_3 = pingReply1_3.RoundtripTime;
            if (pingReply1_3.Status.ToString() != "Success")
            {
                errorcunt1++;
                ad_p1_3.BackColor = Color.Red;
                ad_p1_3.Text = "-";
                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_u.Refresh();
            }
            else
            {
                ad_p1_3.BackColor = Color.Green;
                ad_p1_3.Text = p1_3.ToString();
                ad_p1_u.Text = DateTime.Now.ToString();
                // this.Refresh();
            } counterping1++;
            tbProgress.Text = counterping1.ToString();
        }
    }
    public void ping4()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(ping4));
            return;
        }

        if (checkBox1.Checked == true)
        {
            
            Ping p1 = new Ping();
            PingOptions po1 = new PingOptions();

            ad_p1_4.BackColor = Color.White;
            ad_p1_4.Text = "";
            ad_p1_4.Refresh();
            System.Threading.Thread.Sleep(sleeptime);
           PingReply pingReply1_4 = p1.Send(add_1);
            p1_4 = pingReply1_4.RoundtripTime;
            if (pingReply1_4.Status.ToString() != "Success")
            {
                
                errorcunt1++;
                ad_p1_4.BackColor = Color.Red;
                ad_p1_4.Text = "-";
                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_u.Refresh();
            }
            else
            {
                ad_p1_4.BackColor = Color.Green;
                ad_p1_4.Text = p1_4.ToString();
                ad_p1_u.Text = DateTime.Now.ToString();
                // this.Refresh();
            } counterping1++;
            tbProgress.Text = counterping1.ToString();
        }
    }
    public void ping5()
    {
        if (this.InvokeRequired)
        {
        this.Invoke(new MethodInvoker(ping5));
        return;
        }

        if (checkBox1.Checked == true)
        {
            Ping p1 = new Ping();
            PingOptions po1 = new PingOptions();
           
            ad_p1_5.BackColor = Color.White;
            ad_p1_5.Text = "";
            ad_p1_5.Refresh();
            System.Threading.Thread.Sleep(sleeptime);
            PingReply pingReply1_5 = p1.Send(add_1);
            p1_5 = pingReply1_5.RoundtripTime;
            if (pingReply1_5.Status.ToString() != "Success")
            {
                errorcunt1++;
                ad_p1_5.BackColor = Color.Red;
                ad_p1_5.Text = "-";
                ad_p1_u.Text = DateTime.Now.ToString();
                ad_p1_u.Refresh();
            }
            else
            {
                ad_p1_5.BackColor = Color.Green;
                ad_p1_5.Text = p1_5.ToString();
                ad_p1_u.Text = DateTime.Now.ToString();
                // this.Refresh();


            } counterping1++;
            tbProgress.Text = counterping1.ToString();
            
            email_1();
        }
    }

    public void email_1()
    {
        string emailHost = smpt.Text;
        string emailAbsender = email_ab.Text;
        string emailEmpfänger = email_em.Text;

        if (this.InvokeRequired)
        {
            this.Invoke(new MethodInvoker(email_1));
            return;
        }

        p1_g = (p1_1 + p1_2 + p1_3 + p1_4 + p1_5) / 5;

        if (errorcunt1 <3 && status1 != "ok")
        {
            status1 = "ok";

            System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
            mail.Host = emailHost;
            mail.Send(emailAbsender, emailEmpfänger, "PingTool wieder da!", "Die Adresse " + add_1 + " konnte erfolgreich angepingt werden");

            
        }

        if (email1.Checked == true)
        {
            if (errorcunt1 >= 3)
            {
                if (status1 == "ok")
                {


                    System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient();
                    mail.Host = emailHost;
                    mail.Send(emailAbsender, emailEmpfänger, "Fehlermeldung PingTool", "Die Adresse " + add_1 + " hat eine Fehlermeldung! Bitte Überprüfen\nDurchschnittantwortzeit beträgt: "+ p1_g + "  ms");

                    status1 = "gesendet";
                }
            }
         
        }

    }
    private void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        
        //Entscheidung welche der nächste Ping Aufruf ist.
        switch (counter)
        {
            case 0:
                {
                    ping1();
                    counter++;
                } break;
            case 1:
                {
                    ping2();
                    counter++;
                } break;
            case 2:
                {
                    ping3();
                    counter++;
                } break;
            case 3:
                {
                    ping4();
                    counter++;
                } break;
            case 4:
                {
                    ping5();
                    counter++;
                } break;                
        }
    }

    public void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");


    }

    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        //Wenn noch nicht der 10 Aufruf erfolgt ist, weitermachen!
        if (counter < 40)
        {
        //Aufruf des Backroundworkers
        bw.RunWorkerAsync();
        return;
    }

    //Hier kommt er hin wenn er entgültig fertig ist und seine 5 Aufrufe gemacht hat.
    if ((e.Cancelled == true))
    {
        this.tbProgress.Text = "Canceled!";
    }

    else if (!(e.Error == null))
    {
        this.tbProgress.Text = ("Error: " + e.Error.Message);
    }

    else
    {
        this.tbProgress.Text = "Done!";
    }
    }


das klappt auch...nur die bedinung von dem programm ist richtig schlecht..er braucht super lange bis er was aufgebaut hat...und braucht auch sehr lange bis er was dargestellt hat...es nicht wirklich schön...

könnte mir da jemand helfen?
 

Neue Beiträge

Zurück