Down / Upload Informationen genauer anzeigen

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

    Down / Upload Informationen genauer anzeigen

    Hallo liebe Community,

    Wir stecken da schon lange in einem Problem. Wir haben schon (fast) das gesamte Internet nach möglichen Codes durchsucht.
    Aber wir finden einfach keine Lösung zu diesem einzigen Problem. Es geht um eine Software für Facebook.

    Wir möchten nicht den gesamten Code hier Posten. Da wir keine Nachkopien haben wollen. Nicht das wir glauben das ihr das machen würdet aber es ist für uns zu Riskant. Weil schließlich Haften wir ja für mögliche Schäden an Computer.

    Es geht um (siehe Bild)
    Wir möchten das es alle Informationen über den Upload angezeigt werden also: KBit/s, MB/s, GB/s und 0 MB von 100 MB und wieviel schon geladen wurden. Das haben wir mit den Codes auf diesem Forum schon versucht aber es geht nicht. Es kommt immer ein Ausnahme Fehler....

    Danke schon mal für eure Antworten
    Bilder
    • Check_Data_File_919387398.png

      102,45 kB, 1.344×739, 235 mal angesehen
    Mit welchen Codes hab ihr es versucht? Was für ein Fehler wird geworfen?

    Und übrigens euer Code ist sowieso nicht sicher, da das Programm auch einfach dekompiliert werden kann. Es macht also keinen Sinn, bei einem .Net-Programm zu versuchen, den Code zu schützen.
    Ja das schon aber wir werden die Software (Codes) in einem anderen Software verschlüsseln und das machen wir 2 mal.
    Das machen wir mit allen Softwares die wir bis jetzt hatten. Und es geht ohne Probleme.

    Aber ja hast schon recht.

    Also zu deiner Fragen:

    1) Mit dem von: Thread 1 - Thread 2 - Thread 3 - Thread 4
    2) Ein Aufrufziel hat einen Ausnahmefehler verursacht. (So bald wir alle Codes geschrieben haben und auch so angepasst haben)

    Müssen wir dafür eine neue :

    VB.NET-Quellcode

    1. Private Sub wc_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    2. End Sub


    erstellen
    Ja sry wir haben jetzt einen neuen aber den wollen wir nicht. Wir werden wir dir zeigen einfach auf dem Bild sehen
    Bis jetzt läuft der Tracker mit der Linie und der KBit/s

    Wir wollen aber das alle Daten anzeigen also:
    • MB/s angezeigt wird
    • GB/s angezeigt wird
    • wie viel von wie viel MB wurden heruntergeladen
    • Wie viel Daten wurden bis zum Abschluss gesendet empfangen

    Ja den Code werden wir noch schreiben müssen aber wir melden uns dann wenn wir fertig sind.
    Bilder
    • Check_Data_File_919387398.png

      102,45 kB, 1.344×739, 180 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SwissMediaHD“ ()

    Von KBit/S auf MBit/s umzurechnen ist nicht schwer, einfach durch 1000 teilen, und bei GBit/s dann dementsprechend durch 1000000 teilen. Die gesammtzahl heruntergeladener Bytes liefert auch der Webclient, da muss also ebenfalls nur durch 1000000 geteilt werden.
    "System.Reflection.TargetInvocationException wurde nicht behandelt.
    Message=Ein Aufrufziel hat einen Ausnahmefehler verursacht.
    Source=mscorlib
    StackTrace:
    bei System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
    bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
    bei System.Delegate.DynamicInvokeImpl(Object[] args)
    bei System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
    bei System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
    bei System.Threading.ExecutionContext.runTryCode(Object userData)
    bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
    bei System.Windows.Forms.Control.InvokeMarshaledCallbacks()
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException: System.OverflowException
    Message=Die arithmetische Operation hat einen Überlauf verursacht.
    Source=WindowsApplication1
    StackTrace:
    bei WindowsApplication1.Form1.wc_DownloadProgressChanged(Object sender, DownloadProgressChangedEventArgs e) in Z:\Users\Server\Documents\Visual Studio 2012\Projects\WindowsApplication4\WindowsApplication1\Form1.vb:Zeile 42.
    InnerException: "


    VB.NET-Quellcode

    1. Private Sub wc_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
    2. downloading = False
    3. My.Computer.FileSystem.DeleteFile(tmpfile)
    4. End Sub
    5. Private Sub wc_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    6. Dim speed = e.BytesReceived \ (stp.ElapsedMilliseconds + 1)
    7. speed = speed * 1000
    8. speed = speed >> 10
    9. MetroLabelHeader10.Invoke(Sub() MetroLabelHeader10.Text = speed.ToString)
    10. MetroLabelHeader10.Invoke(Sub() MetroTracker4.Value = speed.ToString)
    11. MetroProgressbar2.Value = e.ProgressPercentage
    12. Totalbytes = e.TotalBytesToReceive
    13. bytes = e.BytesReceived
    14. Me.MetroLabelHeader14.Text = (bytes / 1024 / 1024) & "MB von " & (totalbytes / 1024 / 1024) & "MB"
    15. downloadsekunden = (Now - start).TotalSeconds
    16. averagedownload = bytes / downloadsekunden
    17. restzeit = (Totalbytes - bytes) / averagedownload
    18. MetroLabelHeader11.Text = "Verbleibende Zeit: " & Math.Round(restzeit, 2) & "s"
    19. If MetroTracker4.Value < 200 Then
    20. MetroTracker4.Maximum = 300
    21. ElseIf MetroTracker4.Value < 300 Then
    22. MetroTracker4.Maximum = 400
    23. ElseIf MetroTracker4.Value < 400 Then
    24. MetroTracker4.Maximum = 500
    25. ElseIf MetroTracker4.Value < 500 Then
    26. MetroTracker4.Maximum = 600
    27. ElseIf MetroTracker4.Value < 600 Then
    28. MetroTracker4.Maximum = 700
    29. ElseIf MetroTracker4.Value < 700 Then
    30. MetroTracker4.Maximum = 800
    31. End If
    32. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SwissMediaHD“ ()

    So kann ich den Code überhaupt nicht lesen, bitte formatiere ihn richtig.

    Allerdings lässt dieser Teil der Fehlermeldung

    SwissMediaHD schrieb:

    System.OverflowException
    darauf schließen, dass ein Wert zu groß für einen Datentypen war.
    Dies kann entweder passieren, wenn die Datei mehr als 4GB groß ist und du die Bytezahl als Integer speicherst, was ich aber für unwahrscheinlich halte, oder dass bei einer Gleitkommarechnung NaN oder Infinity rausgekommen ist und du das in eine Ganzzahl umwandeln willst.
    @SwissMediaHD

    Das hier mal durchlesen: VB Tags richtig benutzen

    Zu deinen Fragen: Das geht alles im ProgressChangedEvent des WebClients.

    Als erstes WebClient mit Events deklarieren. Und noch eine Stopwatch:

    VB.NET-Quellcode

    1. Private WithEvents wc As New WebClient
    2. Private sw As New Stopwatch

    Ich mache das ganze jetzt mal mit dem Download einer Datei:
    Spoiler anzeigen

    Starten des Downloads mit DownloadFileAsync:

    VB.NET-Quellcode

    1. wc.DownloadFileAsync(New Uri(DownloadPfad), "Speicherort")
    2. sw = Stopwatch.StartNew

    Jetzt im DownloadProgressChanged-Event des WebClients:

    VB.NET-Quellcode

    1. Private Sub wc_ProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    2. Dim bytesreceived As Double = e.BytesReceived
    3. Dim totalbytestoreceive As Double = e.TotalBytesToReceive
    4. Dim downloadspeed As Double = e.BytesReceived / (sw.ElapsedMilliseconds / 1000)
    5. Dim timeinseconds As Double = (totalbytestoreceive - bytesreceived) / downloadspeed
    6. Dim downloadtime As Double = (sw.ElapsedMilliseconds / 1000)
    7. End Sub

    Alle Angaben sind in Bytes. Also doch etwas größere Zahlen :)
    Hier noch eine Funktion, die automatisch Vorsilben zuweist (aus 1000000 B wird 1 MB):

    VB.NET-Quellcode

    1. Public Function ByteUnit(ByVal bytes As Double, ByVal digits As Integer) As String
    2. Dim value As Double = Math.Log(bytes, 1024.0#)
    3. Dim units() As String
    4. Dim index As Integer
    5. If value < 0.0# Then
    6. units = New String() {"B", "mB", "µB", "nB", "pB", "fB", "aB", "zB", "yB"}
    7. Else
    8. units = New String() {"B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
    9. End If
    10. index = Math.Min(units.Length, CInt(Math.Floor(value)))
    11. Return (bytes/ 1024.0# ^ index).ToString("0." & New String("0"c, digits)) & " " & units(Math.Abs(index))
    12. End Function

    So verwendest du die Funktion:

    VB.NET-Quellcode

    1. Dim bytesreceived As Double = ByteUnit(e.BytesReceived, 1)

    Die verbleibende Downloadzeit wird übrigens in Sekunden angezeigt. Das musst du dann eben noch umrechenen, so wie du es brauchst :)

    Jetzt das ganze noch für den Upload:
    Spoiler anzeigen

    Upload mit UploadFileAsync starten:

    VB.NET-Quellcode

    1. wc.UploadFileAsync(New Uri("UploadPfad"), "Datei zum Hochladen")
    2. sw = Stopwatch.StartNew

    Nun Im UploadProgressChanged-Event des Webclients:

    VB.NET-Quellcode

    1. Dim bytessent As Double = e.BytesSent
    2. Dim totalbytestosend As Double = e.TotalBytesToSend
    3. Dim uploadspeed As Double = e.BytesSent / (sw.ElapsedMilliseconds / 1000)
    4. Dim timeinseconds As Double = (totalbytestosend - bytessent) / uploadspeed
    5. Dim uploadtime As Double = (sw.ElapsedMilliseconds / 1000)


    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Switcherlapp97“ () aus folgendem Grund: Download/Uploadzeit dem Code hinzugefügt

    Manschula schrieb:

    Hey,

    eine Anleitung dazu gibt es hier: Bitte VB Tags benutzen - was ist damit gemeint?

    Gruß Manschula
    Danke, Ja ich kenne es aus meinem Forum da muss ich auch zum Quellcode gehen :)

    Artentus schrieb:

    So kann ich den Code überhaupt nicht lesen, bitte formatiere ihn richtig.

    VB.NET-Quellcode

    1. Private Sub wc_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
    2. downloading = False
    3. My.Computer.FileSystem.DeleteFile(tmpfile)
    4. End Sub
    5. Private Sub wc_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    6. Dim speed = e.BytesReceived \ (stp.ElapsedMilliseconds + 1)
    7. speed = speed * 1000
    8. speed = speed >> 10
    9. MetroLabelHeader10.Invoke(Sub() MetroLabelHeader10.Text = speed.ToString)
    10. MetroLabelHeader10.Invoke(Sub() MetroTracker4.Value = speed.ToString)
    11. MetroProgressbar2.Value = e.ProgressPercentage
    12. Totalbytes = e.TotalBytesToReceive
    13. bytes = e.BytesReceived
    14. Me.MetroLabelHeader14.Text = (bytes / 1024 / 1024) & "MB von " & (totalbytes / 1024 / 1024) & "MB"
    15. downloadsekunden = (Now - start).TotalSeconds
    16. averagedownload = bytes / downloadsekunden
    17. restzeit = (Totalbytes - bytes) / averagedownload
    18. MetroLabelHeader11.Text = "Verbleibende Zeit: " & Math.Round(restzeit, 2) & "s"
    19. If MetroTracker4.Value < 200 Then
    20. MetroTracker4.Maximum = 300
    21. ElseIf MetroTracker4.Value < 300 Then
    22. MetroTracker4.Maximum = 400
    23. ElseIf MetroTracker4.Value < 400 Then
    24. MetroTracker4.Maximum = 500
    25. ElseIf MetroTracker4.Value < 500 Then
    26. MetroTracker4.Maximum = 600
    27. ElseIf MetroTracker4.Value < 600 Then
    28. MetroTracker4.Maximum = 700
    29. ElseIf MetroTracker4.Value < 700 Then
    30. MetroTracker4.Maximum = 800
    31. End If
    32. End Sub


    Hier kommt der Fehler:

    VB.NET-Quellcode

    1. downloadsekunden = (Now - start).TotalSeconds


    Wir möchten ja die Zeit nochmals umrechnen in 00:00:00 das haben wir schon gemacht aber dann brauchen die Umrechnung nicht mehr da die bytes umgerechnet werden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SwissMediaHD“ ()

    Führe das Programm zunächst noch einmal aus und provoziere den Fehler. Wenn er auftritt beendest du aber nicht das Debugging, sonder lässt alles so, wie es ist, und siehst dir im Editor den Inhalt aller Variablen an. Wenn eine davon NaN oder Infinity (oder 0, wenn du durch sie teilst) ist, dann hast du schon mal die Fehlerursache.
    Und welchen Datentyp hat "downloadsekunden"?
    Den Code sehen wir nicht

    Und den haben

    Artentus schrieb:

    Und welchen Datentyp hat "downloadsekunden"?
    Ja dieser Code hat mal funktioniert aber jetzt nicht mehr der ist für die Zeitberechnung in Sekunden.
    Das Doofe an der Sache wenn man einen Download macht steht da: zb. 638131387163 Sekunden :thumbdown:


    Wir haben eine Funktion gefunden die diese Sekunden aber Formatiert in 00:00:00
    Bilder
    • Check_Data_File_919387412.png

      42,38 kB, 1.343×738, 180 mal angesehen
    Wir sehen den nur den Code ohne NaN oder Infinity eben der Code kommt wegen dieser Zeile

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports MetroControls
    3. Public Class Form1
    4. Private WithEvents wc As New Net.WebClient With {.Proxy = Nothing}
    5. Private downloading As Boolean = False
    6. Private tmpfile As String = My.Computer.FileSystem.GetTempFileName
    7. Private stp As Stopwatch
    8. Dim Pfad As String = Nothing
    9. Dim sw As New Stopwatch
    10. Dim received As Integer
    11. Dim Totalbytes As Double
    12. Dim bytes As Double
    13. Dim downloadsekunde As Integer
    14. Dim downloadsekunden As Integer
    15. Dim averagedownload As Integer
    16. Dim restzeit As Integer
    17. Dim start As Date
    18. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles MetroButton5.Click
    19. If Not downloading Then
    20. downloading = True
    21. stp = Stopwatch.StartNew
    22. wc.DownloadFileAsync(New Uri("http://download.thinkbroadband.com/100MB.zip"), tmpfile)
    23. End If
    24. End Sub
    25. Private Sub wc_DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles wc.DownloadFileCompleted
    26. downloading = False
    27. My.Computer.FileSystem.DeleteFile(tmpfile)
    28. End Sub
    29. Private Sub wc_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    30. Dim speed = e.BytesReceived \ (stp.ElapsedMilliseconds + 1)
    31. speed = speed * 1000
    32. speed = speed >> 10
    33. MetroLabelHeader10.Invoke(Sub() MetroLabelHeader10.Text = speed.ToString)
    34. MetroLabelHeader10.Invoke(Sub() MetroTracker4.Value = speed.ToString)
    35. MetroProgressbar2.Value = e.ProgressPercentage
    36. Totalbytes = e.TotalBytesToReceive
    37. bytes = e.BytesReceived
    38. Me.MetroLabelHeader14.Text = (bytes / 1024 / 1024) & "MB von " & (totalbytes / 1024 / 1024) & "MB"
    39. downloadsekunden = (Now - start).TotalSeconds
    40. averagedownload = bytes / downloadsekunden
    41. restzeit = (Totalbytes - bytes) / averagedownload
    42. MetroLabelHeader11.Text = "Verbleibende Zeit: " & Math.Round(restzeit, 2) & "s"
    43. If MetroTracker4.Value < 200 Then
    44. MetroTracker4.Maximum = 300
    45. ElseIf MetroTracker4.Value < 300 Then
    46. MetroTracker4.Maximum = 400
    47. ElseIf MetroTracker4.Value < 400 Then
    48. MetroTracker4.Maximum = 500
    49. ElseIf MetroTracker4.Value < 500 Then
    50. MetroTracker4.Maximum = 600
    51. ElseIf MetroTracker4.Value < 600 Then
    52. MetroTracker4.Maximum = 700
    53. ElseIf MetroTracker4.Value < 700 Then
    54. MetroTracker4.Maximum = 800
    55. End If
    56. End Sub
    57. End Class


    In der Zeile 42 steht es ja und das währe dann

    VB.NET-Quellcode

    1. downloadsekunden = (Now - start).TotalSeconds
    Was Du (Ihr) erst mal machen solltet, bevor ihr überhaupt weiter macht, ist: OPTION STRICT ON.

    Was istn das für ne Firma? Ne Gruppe von Experten, die wenig Ahnung von dem haben, was sie tun?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    SpaceyX schrieb:

    Was istn das für ne Firma? Ne Gruppe von Experten, die wenig Ahnung von dem haben, was sie tun?
    Also:
    1) Unsere VB Programmierer sind in den Ferien
    2) Programmieren wir eig. nicht mit VB deshalb können wir nicht so gut VB verstehen
    3) Machen wir (eig) nur Support von IT Geräten aber wir wollen unsere Dienstleistungen verbessern mit Software und vieles mehr
    4) Ist VB besser zu Programmieren als mit einer anderen Sprache

    Also bitte bevor ihr unsere Community abwertet einfach in unser Forum gehen und lesen, lesen und noch mehr lesen.

    Zu euren Fragen:
    Ja wir lassen es glaube ich mit der Zeit wichtig ist es jetzt nur noch das mit den Umrechnungen von bytes zu KBit/s MB/s und GB/s machen
    Das mit den 0MB von 100MB geht jetzt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SwissMediaHD“ ()

    Hey,

    wie soll man das verstehen? Ihr programmiert nicht mit VB, jedoch programmiert es sich besser in VB als in einer anderen Sprache? Bevor das alles zu OffTopic wird. Macht in all euren Projekten OPTION STRICT ON, das ist eine Grundregel und die Grundvoraussetzung für eine typsichere Programmierung.

    Euren Service zu verbessern ist ja ein Vorhaben, gegen das nichts einzuwenden ist, jedoch schadet gefährliches Halbwissen nicht nur euren Kunden, sondern auch euch.

    Back to topic!
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o