Ausführung wiederholen beim Starten des Programms

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RISSN.

    Ausführung wiederholen beim Starten des Programms

    Hallo,

    ich habe ein Programm wo ich beim starten prüfe, ob der SQL Server erreichbar ist, ohne diesen ist das Programm Sinnlos. Momentan haben wir immer wieder Probleme mit unserer VPN Verbindung, daher geht es oft erst beim zweiten starten. Wir kann ich in der Load Prozedur die Prüfung wiederholen? Eigentlich prüfe ich mittels Erreichbarkeit der IP, wenn ich einen negativen Wert bekomme, würde ich gerne mittels MessageBox (Ja/Nein) abfragen, ob es wiederholt werden soll. Würde das mit Do - Loop gehen?
    @RISSN Vielleicht ist da ein Timer sinnvoller, da Du bei einem Do-Loop eine Pause einlegen müsstest, um den Server nicht zeitlich zu dicht anzutriggern.
    Stoppe den Timer nach Verbindungsaufbau oder nach n vergeblichen Versuchen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RISSN schrieb:

    Eigentlich prüfe ich mittels Erreichbarkeit der IP
    Ich würde lieber eine Dummy-Abfrage an den SQL-Server absetzen.
    Ein Ping alleine sagt noch nicht alles über den Status des SqlServer aus.

    RISSN schrieb:

    Würde das mit Do - Loop
    Ja, aber ich würde eine For-Loop nehmen, damit die irgendwann abbricht.
    Ganz grob:

    VB.NET-Quellcode

    1. For i = 1 To 10
    2. If SqlServerAvailable Then Exit For 'hier schreibst du deine Available-Funktion
    3. Dim result As DialogResult = MessageBox.Show("wiederholen?", "SqlTest", MessageBoxButtons.YesNo)
    4. If result = DialogResult.No Then Exit For
    5. Await Task.Delay(2000)
    6. Next
    7. If Not SqlServerAvailable Then Application.Exit

    RodFromGermany schrieb:

    Vielleicht ist da ein Timer sinnvoller
    Oder ein Wait mittels Task.Delay (s.o.)

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    na, wenn in jedem Durchgang eine Messagebox angezeigt wird, ist Do-Loop durchaus geeignet.
    Die Schleife wird ja verlassen, wenn der User das wünscht.
    ein timer ist nicht erforderlich, weil es vergeht ja eh Zeit, wenn der User die Msgbox liest und reagiert.

    Do-Loop wäre ungeeignet, wenn keine Msgbox gezeigt würde. Weil dann könnte ja auftreten, dass der Loop unendlich läuft, weil der Server eben ganzngar unerreichbar ist.
    Bei einem meiner Programme prüfe ich bei jedem öffnen einer Form ob eine DB Connection besteht. Und natürlich beim Start des Programms. Bei DB Abfragen ist zudem der Fall einer fehlenden Connection berücksichtigt. Denke das sollte ausreichen um Verbindungsproblemen Sorge zu tragen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich denke mal, dass die MessageBox auf Dauer lästig ist, wenn die Verbindung nicht steht.
    Im finalen Betrieb ist eine MessageBox dann nötig, wenn nach n Versuchen keine Verbindung hergestellt werden konnte.
    In diesem Kontext ist der Timer sinnvoll.
    Wenn die Verbindung steht, kann gleich die entsprechende GUI angezeigt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    erstmal vielen Dank für die schnell Hilfe. Ich habe jetzt das ganze mit Do-Loop erledigt. Dabei ist es mit ja egal wie oft der Benutzer auf Wiederholen drückt. Niemand muss das machen. @mrMo das prüfen mache ich nur beim starten, aber natürlich habe alles Abfragen eine Fehlerbehandlung, dennoch es stimmt schon, ich sollte vor der Abfrage prüfen, ob die Verbindung steht, gute Idee.

    Also wirklich vielen Dank an alle