Entwickler-Ecke

C# - Die Sprache - Programmabschnitt wiederholen


Geneesys - Mo 14.05.12 11:18
Titel: Programmabschnitt wiederholen
Hallo alles zsm,

Ich möchte gerne das mein Programm nach dem durchlauf wieder von vorne anfängt.

Ich hatte es bereits mit Case und goto versucht nur leider wurde dabei nichts mehr in die ListBox eingetragen.
Nun ja erstmal der Code:

C#-Quelltext
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:
        private void button1_Click(object sender, EventArgs e)
        {
           // Hier soll das Programm am ende wieder starten
            if (textBox1.Text != string.Empty)
            
            {
                System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
                System.Net.NetworkInformation.PingReply prep;
                string url = textBox1.Text;
                prep = p.Send(url);
                if (prep.Status == System.Net.NetworkInformation.IPStatus.Success)
                {
                    string address = prep.Address.ToString();
                    string time = prep.RoundtripTime.ToString();
                    listBox1.Items.Add("Ping: "+time+"ms");

                }
                else
                {
                    string status = prep.Status.ToString();
                    listBox1.Items.Add("Fehler: " + status);
                    
                }
            }
            else
                listBox1.Items.Add("URL-IP Fehler");
        }

Und hab hier soll es nach 5 Sekunden wieder von vorne anfangen.

Kann mir da jemand helfen ?
Ich habe es auch schon mit schleifen probiert aber ich habe ja eig. keine bedingungen ... Da ich ein Anfänger bin habe ich es nicht so richtig hinbekommen.

Wäre für jeden Tipp dankbar!

Gruß

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


mats74 - Mo 14.05.12 11:38

Hallo Geneesys

Du könntest mit der Timer-Klasse [http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx] den Event immer nach 5 Sek. auslösen.
Ist sicherlich die einfachste Lösung.

Ich würde dies aber nicht in einem Control-Event sondern in einer separaten Methode lösen.
Diese Methode kannst Du ja nach Bedarf bei einem Click-Ereignis sonst noch auslösen.


Geneesys - Mo 14.05.12 11:55

Hey,

Danke für eine schnelle Antwort.

Kann ich das nicht vllt doch irgendwie mit "Case" lösen ?
Dann könnte ich am ende(GOTO)bevor er wieder von vorne beginnt noch ein

C#-Quelltext
1:
System.Threading.Thread.Sleep( 500 );                    

einfügen :/

Oder geht das alles vllt noch einfacher ?

Gruß
Geneesys

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Mo 14.05.12 12:40

Hallo Geneesys,

ein Thread.Sleep() legt deinen GUI-Thread lahm (d.h. die GUI wäre nicht mehr bedienbar -> "Programm reagiert nicht mehr"!).
Ein Timer ist dafür gerade die richtige Wahl.


Geneesys - Mo 14.05.12 12:45

Hättest du vllt hier ein beispiel für einen Timer ? (:

Wie ich einen Timer erstelle habe ich bereits etwas gefunden. Nur wie bekomme ich es nun in meinen Button :/


C#-Quelltext
1:
2:
3:
4:
5:
System.Timers.Timer aTimer = new System.Timers.Timer();
        
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 2000;
aTimer.Enabled = true;


Moderiert von user profile iconTh69: C#-Tags hinzugefügt


mats74 - Mo 14.05.12 13:38

So müsste deine Codestruktur aussehen:

C#-Quelltext
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:
namespace DeinNamespace
{
    public partial class DeineKlasse : Form
    {
        // Form initialisieren
        public DeineKlasse()
        {
            // Komponenten initialisieren
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // Methode ausfuehren
            DeineMethode();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // mach mal was
            // oder
            DeineMethode();
        }

        private void DeineMethode()
        {
            // oder mach sonst was
        }
    }
}

Dieses Beispiel zeigt Dir eine Klasse einer WinForm-anwendung.
Den Timer solltest Du nicht in Button-Event erstellen sondern nach dem initialisieren der Form oder direkt in der Klasse.
Das gleiche gilt für eine Konsolenanwendung.