ComboBox Problem

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Klar. Es besteht dann nur die Gefahr, dass das ne Endlosschleife wird, wenn der Dienst nicht gestoppt werden kann.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed ich versteh es nicht...
    ich bin schon mit Sleep auf 1000 und bekomm dennoch die MessageBox angezeigt...

    Ich habs nun schon 3 mal umgeändert, ohne Erfolg. Was mach ich falsch?

    Aktueller Code:

    VB.NET-Quellcode

    1. Private Function stop_FBGMO() As String
    2. Dim FBGMO As New ServiceController("FirebirdGuardianMEDICALOFFICE") 'FB Guardian
    3. If FBGMO.Status.Equals(ServiceControllerStatus.Stopped) Then
    4. pb_stop_fbgmo.Visible = True
    5. TextBox1.AppendText("FBGMO stopped" & Environment.NewLine)
    6. Exit Function
    7. Else
    8. FBGMO.Stop()
    9. For i = 1 To 10
    10. System.Threading.Thread.Sleep(1000)
    11. If Not FBGMO.Status.Equals(ServiceControllerStatus.Stopped) Then Continue For
    12. pb_stop_fbgmo.Visible = True
    13. TextBox1.AppendText("FBGMO stop ok" & Environment.NewLine)
    14. Exit Function
    15. Next
    16. MessageBox.Show("Konnte Dienst Firebird-Guardian nicht stoppen!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Stop)
    17. End If
    18. End Function


    Schau bitte nochmal drüber. Danke
    Nein! Doch! OHH!
    probierma den:

    VB.NET-Quellcode

    1. Private Async Sub Stop_FBGMO()
    2. Dim FBGMO As New ServiceController("FirebirdGuardianMEDICALOFFICE") 'FB Guardian
    3. If FBGMO.Status.Equals(ServiceControllerStatus.Stopped) Then Return
    4. FBGMO.Stop()
    5. pb_stopservices.Visible = True
    6. Await Threading.Tasks.Task.Delay(1000)
    7. If FBGMO.Status.Equals(ServiceControllerStatus.Stopped) Then
    8. TextBox1.AppendText("stop_fbgmo_ok" & Environment.NewLine)
    9. Else
    10. TextBox1.AppendText("stop_fbgmo_fail" & Environment.NewLine)
    11. End If
    12. pb_stopservices.Visible = False
    13. check = 0
    14. End Sub
    Statt Thread.Sleep wird hier Task.Delay verwendet - das blockiert nicht den eigenen Thread.
    Ich hoff doch einfach stark, dass man nicht jedes mal ein neues ServiceController-Objekt erzeugen muss, um den aktuellen Status zu erhalten ...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @ErfinderDesRades Danke für dein Snippet.
    Ich hab mir das nun mal angesehen und stell mir nun die Frage: "Wo ist die Schleife hin, die mir den Status abprüft?"
    Übersehe ich da was im Code?
    Von der Theorie wie ich es verstanden habe, macht der nur eine Prüfung nach 1000ms?!

    VB.NET-Quellcode

    1. Dim FBGMO As New ServiceController("FirebirdGuardianMEDICALOFFICE") 'FB Guardian
    2. If FBGMO.Status.Equals(ServiceControllerStatus.Stopped) Then Return
    3. FBGMO.Stop()
    4. pb_stopservices.Visible = True
    5. Await Threading.Tasks.Task.Delay(1000)

    oder interpretier ich es falsch?
    Bitte klär mich auf wenn ich es falsch verstehe.
    Danke und Grüße Stefan
    Nein! Doch! OHH!
    Ich bin mal so frei: es gibt keine Schleife, sondern nur eine einzige Überprüfung. Es ging ihm wohl um die nebenläufige Abarbeitung (Zeile#1 und #6, Async-Await), damit Dein GUI nicht hängen bleibt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.