Laden...

Programm soll nichts tun, bis Rechner online ist

Erstellt von LittleTester vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.442 Views
L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren
Programm soll nichts tun, bis Rechner online ist

Also zunächst möchte ich nochmal sagen, dass ich Anfänger bin. Also steinigt mich für den folgenden Code (der ja immerhin schonmal funktioniert) nicht. Das das ganze ein bisschen Murks ist weis ich, deswegen möchte ich fragen, wie man es besser machen kann.

Ziel ist es, dass das Programm erst los läuft, sobald der Computer eine Internetverbindung hat. Dazu teste ich alle 10 Sekunden, ob www.google.de erreichbar ist. Erst wenn das geschieht hören die Versuche auf und das Programm läuft los. Aber hier erstmal, was ich so zusammengebaut habe:


        bool isOnline = false;

        public void testping() {
            try  {
                Ping ping = new Ping();
                PingReply pingReply = ping.Send("www.google.de");
                if (pingReply.Status == IPStatus.Success) {
                    isOnline = true;
                }
            } catch {
                Thread.Sleep(10000); // 10 Sekunden nichts machen
            }
        }

        private void Form1_Load(object sender, EventArgs e) {

            while(isOnline == false) {
                testping();
            }
// Und hier geht das eigentliche Programm los

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

16.806 Beiträge seit 2008
vor 2 Jahren

Über die Art und Weise lässt sich streiten, aber im Endeffekt gibts keine andere Möglichkeit verlässlich den Internetstatus zu prüfen, als ne Webseite / ein Endpunkt im Internet zu erreichen.

Generell: mit Tasks kann man viel ressourcenschonender "Warten" als mit Thread.Sleep.
Ansonsten kannst Dich natürlich immer von Google Suche nach "c# wait for internet connection" inspirieren lassen, wie es noch so geht - je nachdem auch welcher Anwendungstyp.

PS: das ist ein Review-Thema.
Bitte nächstes Mal sowas auch im Review-Bereich posten 😉

L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren

Sorry, irgendwie müsst ihr meine Threads immer rumschieben 😦

Es geht glaube ich eher darum, dass ich das Programm in eine Endlosschleife schicke, sofern keine Internetverbindung besteht und es sich quasi aufhängt und der Fehler nicht sauber behandelt wird. So wurde mir das damals in einem anderen Forum (in dem ich nicht mehr aktiv bin) gesagt. Deswegen eben die Frage, ob und wie man das vernünftig löst.

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

2.078 Beiträge seit 2012
vor 2 Jahren

Dann zähle, wie oft es nicht funktioniert hat und ab einer bestimmten Anzahl zeigst Du einen Fehler an.

Dass sich alles aufhängt, kannst Du nur (sinnvolle) mit dem Task-based asynchronous pattern lösen.
Das solltest Du aber nicht "irgendwie" nutzen, die Lernhürde ist hoch und um es richtig nutzen zu können, musst Du es auch verstanden haben.

Ich persönlich würde es aber ganz anders machen.
Ich würde eher Verbindungsfehler entsprechend behandeln und anzeigen.
Der Nutzer kann weiterhin das Programm nutzen, bekommt bloß immer angezeigt, dass keine Verbindung notwendig ist.
Oder Du machst es wie z.B. Outlook und zeigst irgendwo im Programm an, dass es keine Verbindung gibt.

309 Beiträge seit 2020
vor 2 Jahren

Ich würde noch die globale Variable raus nehmen und die Antwort von der Methode zurückgeben lassen.

Aber wie Palladin007 sagt, ist es wahrscheinlich schlauer, vor einer bestimmten Aktion zu Prüfen.
Kann ja sein dass du 10 Sek. nach erfolgreichen Start kein Internet mehr hast.

C
2.121 Beiträge seit 2010
vor 2 Jahren

Was macht der Ping wenn er keine Antwort kriegt, fällt der dann wirklich in eine Exception oder gibt das einen Status zurück?
Dann wäre dein Programm nämlich weit davon entfernt "nichts zu tun", weil es dann permanent ständig pingen würde 🙂

L
LittleTester Themenstarter:in
158 Beiträge seit 2019
vor 2 Jahren

Es gibt leider wirklich eine Exception. Offline oder nicht vorhandener Host ist offenbar nicht vorgesehen 🐛

IDE: Visual Studio 2022
Sofern nicht anders genannt basieren meine Projekte auf C# und .net 6

T
2.219 Beiträge seit 2008
vor 2 Jahren

Ist auch so dokumentiert, wenn es Probleme beim senden/empfangen der ICMP Meldungen gibt.
In dem Fall bekommst du auch eine PingException mit entsprechenden Status Informationen.
Da ICMP auch teilweise geblockt werden, wirst du dies vermutlich auch häufiger bekommen.
Du musst aber alle Fälle abdecken sprich Exceptions sowie Status Meldungen über nicht erreichbar oder offline.

Doku:
Ping.Send Methode (System.Net.NetworkInformation)

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.