Progressbar in Endlos Schleife

  • VB.NET
  • .NET (FX) 4.0

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von TVX.

    Progressbar in Endlos Schleife

    Hallo Zusammen,

    Ich habe einmal eine Frage an euch. Folgende Situation, ich habe eine eine Funktion die versucht einen Ping an meinen Server zu schicken.

    VB.NET-Quellcode

    1. Function TestInternetConnection() As Boolean
    2. Try
    3. Dim s As New Stopwatch
    4. s.Start()
    5. My.Computer.Network.Ping("marvinkleinmusic.bplaced.net", 80)
    6. Application.DoEvents()
    7. Return True
    8. s.Stop()
    9. Catch ex As Exception
    10. Return False
    11. End Try
    12. End Function


    Während jetzt die Funktion am Pingen ist, soll eine Progressbar immer wieder einen grünen Streifen durchlaufen.

    Beispiel:



    Wie lässt sich das jetzt einfach realisieren?

    Liebe Grüße,
    Marvin
    Als Style Marquee setzen.
    Kann mir aber nicht vorstellen, dass Google dazu nichts gefunden hat. ;)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Diese Funktion ist ziemlich schlecht gecodet, um das mal so zu sagen. My-Namespace statt der Ping-Klasse, DoEvents statt asynchrone Programmierung, Try-Catch und dann wird auch noch ne Stopwatch gestartet, die 1. nie verwendet wird und 2. nie gestoppt wird, weil die Return-Anweisung davor steht.
    Verwende die Ping-Klasse und starte dann die Anfrage mit SendAsync. Sobald du die Antwort erhalten hast, wird das PingCompleted-Ereignis ausgelöst, in dem du genaue Informationen zu Dauer, eventuellen Fehlern und weiterem erhältst. Deine Anwendung bleibt währenddessen responsive ohne Application.DoEvents und Try-Block und Stopwatch kannst du dir auch sparen.
    Hallo nochmal,

    Leider wird mir bei dem MSDN kein Beispiel Code angezeigt. Jedenfalls welchen der SendAsync würdest du mir empfehlen?

    -SendAsync(IPAddress, Object)
    -SendAsync(IPAddress, Int32, Object)
    -SendAsync(IPAddress, Int32, Byte(), Object)
    -SendAsync(IPAddress, Int32, Byte(), PingOptions, Object)

    Folgendes möchte ich in der Funktion drin haben, einen Timeout von 80, Falls Internet da ist die Anzahl der ms für die Rückmeldung

    und was hat es bei den Funktionen, mit dem Object auf sich? Byte ist ja klar, da wird festgelegt wieviele Daten geschickt werden. und wie schaut es mit den PingOptions aus?

    Liebe Grüße
    So:

    VB.NET-Quellcode

    1. Private ping As Ping
    2. Private Sub StartPing(address As IPAddress)
    3. Const timeout As Integer = 80
    4. If (ping Is Nothing) Then
    5. ping = New Ping()
    6. AddHandler ping.PingCompleted, AddressOf PingCompleted
    7. End If
    8. ping.SendAsync(address, timeout, Nothing)
    9. End Sub
    10. Private Sub PingCompleted(sender As Object, e As PingCompletedEventArgs)
    11. End Sub
    Huhu vielen dank für dieses Beispiel, doch wie komme ich dort jetzt an die Rückmeldungszeit? Bzw. ob es geklappt hat oder nicht?

    Liebe Grüße
    Im PingCompletet-Ereignis kannst du mit e.Error den Fehler abfragen, falls einer aufgetreten ist (andernfalls ist e.Error Nothing). e.Reply.RoundtripTime ist die verstrichene Zeit und e.Reply.Status ist der Status der Anfrage (also entweder Erfolg oder einer der möglichen Fehler).
    Hallöchen nochmal,

    Okay die ms anzeige habe ich hinbekommen :thumbup: Allerdings habe ich gerade mal kurz testeshalber den Inet Stecker gezogen und das Programm gestartet, Dabei ist folgender Fehler gekommen:

    System.Reflection.TargetInocationExecption {"Ein Aufrufziel hat einen Ausnahmefehler verursacht."} Wenn ich den Staus als Textausgeben lasse erhalte ich mit Internet eine 0 sprich kein Fehler ohne Kabel müsste eigendlich ja eine 1 kommen, da taucht aber dieser Fehler auf :)

    MSDN schrieb:

    If an exception is raised during an asynchronous operation, the class will assign the exception to the Error property. The client application's event-handler delegate should check the Error property before accessing any properties in a class derived from AsyncCompletedEventArgs; otherwise, the property will raise a TargetInvocationException with its InnerException property holding a reference to Error.
    Du musst die Error-Eigenschaft prüfen und entsprechend darauf reagieren.

    Artentus schrieb:

    Du musst die Error-Eigenschaft prüfen und entsprechend darauf reagieren.



    Wie mache ich das denn am besten?

    Noch eine kurze Frage, gibt es auch eine spezielle Klasse für den Download von Dateien? Da ich derzeit versuche, Dateien auf einem Server zu speichern, sowie wieder runterzuladen um diese zu bearbeiten.

    Liebe Grüße

    MarvinKleinMusic schrieb:

    Wie mache ich das denn am besten?

    VB.NET-Quellcode

    1. ​If e.Error = Nothing Then
    2. 'kein Fehler
    3. Else
    4. 'Fehler; behandeln
    5. End If


    MarvinKleinMusic schrieb:

    gibt es auch eine spezielle Klasse für den Download von Dateien?
    Ja, den WebClient.

    Artentus schrieb:

    ​If e.Error = Nothing Then
    'kein Fehler
    Else
    'Fehler; behandeln
    End If


    Fehler 1 Der =-Operator ist für die Typen "System.Exception" und "System.Exception" nicht definiert. C:\Users\Marvin\Documents\Visual Studio 2010\Projects\Updater\Updater\update.vb 30 12 Updater

    Bei allen Fehlern, soll der Vorgang einfach abgebrochen werden.
    Referenzgleichheit prüft man mit Is.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Huhu nochmal,

    Ich habe es mal mit dem Is ersetzt, Wenn kein Fehler auftrit funktioniert es derzeit wunderbar, aber nach wie vor erhalte ich den vorhin genannten Fehler ohne Internet, wie kann ich jetzt falls ein Fehler auftrit, diesen Ignorieren?

    Ich habe hier nochmal ein wenig (wahrscheinlich grottigen) Code über die Download Funktion des Files, das soll ausgeführt werden, wenn der Internettest bestanden ist. Allerdings hängt das Programm eine weile bis es mit der Funktion startet. Wie lässt sich das am besten lösen?

    VB.NET-Quellcode

    1. Try
    2. Dim pfad As String = Application.StartupPath & "\Umrechner.exe"
    3. httpclient = New WebClient
    4. Dim URL As String = "http://www.marvinkleinmusic.bplaced.net/error.zip"
    5. Application.DoEvents()
    6. httpclient.DownloadFileAsync(New Uri(URL), pfad)
    7. Application.DoEvents()
    8. Catch ex As Exception
    9. MsgBox("Error:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical, "Error")
    10. End Try



    Liebe Grüße & vielen dank für eure Hilfe!
    Du musst die Abfrage durchführen, bevor du irgend was anderes machst, wie auch dem Zitat aus MSDN zu entnehmen ist.

    Beim WebClient funktionierts genauso, wie beim Ping, Try-Catch und DoEvents raus und dann nen Eventhandler anlegen. Ich hab dir jetzt schon genug vorgekaut, such die Funktionen auf MSDN und klick dich durch die Links durch, so wie ichs gerade eben auch gemacht hab.
    Die Abfrage ist ja das erste was bei PingCompleted ausgeführt wird, siehe:

    VB.NET-Quellcode

    1. Private Sub PingCompleted(sender As Object, e As PingCompletedEventArgs)
    2. If e.Error Is Nothing Then
    3. 'kein Fehler
    4. Else
    5. detailausgabe.AppendText(vbNewLine & "Es konnte keine Verbindung zum Server hergestellt werden.....")
    6. End If
    7. If e.Reply.Status = 0 Then
    8. detailausgabe.AppendText(vbNewLine & "Antwort in " & e.Reply.RoundtripTime & "ms erhalten....." & vbNewLine & "Aktualisierung läuft....")
    9. 'Aussehen der Progressbar ändern
    10. ProgressBar1.Style = ProgressBarStyle.Blocks
    11. detailausgabe.Focus()
    12. 'Alle Umrechner Prozesse beenden
    13. For Each Process In System.Diagnostics.Process.GetProcessesByName("Umrechner")
    14. Process.Kill()
    15. Next
    16. Try
    17. Dim pfad As String = Application.StartupPath & "\error.zip"
    18. httpclient = New WebClient
    19. Dim URL As String = "http://www.marvinkleinmusic.bplaced.net/error.zip"
    20. httpclient.DownloadFileAsync(New Uri(URL), pfad)
    21. Catch ex As Exception
    22. MsgBox("Error:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical, "Error")
    23. End Try
    24. Else
    25. abbrechen.Enabled = True
    26. detailausgabe.AppendText(vbNewLine & "Es konnte keine Verbindung zum Server hergestellt werden.....")
    27. End If
    28. End Sub



    Ich schaue mir mal kurz an wie ich es beim Webclient umstrukturieren kann.

    LG
    Während jetzt die Funktion am Pingen ist, soll eine Progressbar immer wieder einen grünen Streifen durchlaufen ?

    Mal selber was kleines oder noch leichter und auch schön , nimm ein animiertes gif Bild !




    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net.NetworkInformation
    3. Imports System.Net
    4. Public Class Form1
    5. Dim IP As IPAddress = IPAddress.Parse("178.63.68.84")
    6. Dim Timeout As Integer = 1000
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. Dim ping As New Ping()
    9. AddHandler ping.PingCompleted, AddressOf Ping_Completed
    10. ping.SendAsync(IP, Timeout, Nothing)
    11. End Sub
    12. Private Sub Ping_Completed(sender As Object, e As PingCompletedEventArgs)
    13. If e.Error Is Nothing AndAlso e.Reply.Status = IPStatus.Success Then
    14. MessageBox.Show("Erfolg - Ping " & e.Reply.RoundtripTime.ToString() & " ms")
    15. Else
    16. MessageBox.Show("Fehler")
    17. End If
    18. End Sub
    19. End Class

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „TVX“ ()