Updater Problem.

07/20/2013 01:18 vbcji#1
Hey

ich habe einen updater geschrieben

so es hat alles funktioniert bis ich versucht habe
die verbliebene zeit einzufügen also das er sie anzeigt
so

jetzt auf einmal geht progressbar nicht mehr und das mir das anzeigt wieviel mb von mb noch übrig sind


aber download geht

könnt ihr mir helfen ???



Code:
Imports System.Net
Imports System.Timers

Public Class Update




    Private WithEvents httpclient As WebClient
    Dim Pfad As String = Nothing
    Dim sw As New Stopwatch
    Dim received As Integer


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox("Bitte Datei in das Spielverzeichniss unter Update.exe speichern, die .exe ausführen und auf ersetzen klicken !", MsgBoxStyle.Information, "Information")
        Me.Hide()
ShowDialog:
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName = Nothing Then
            GoTo ShowDialog
        End If
        Pfad = SaveFileDialog1.FileName
        Try
            Me.Show()
            httpclient = New WebClient
            Dim URL As String = "http://www.weebly.com/uploads/2/1/9/9/21997230/updater.exe"
            Application.DoEvents()
            httpclient.DownloadFileAsync(New Uri(URL), Pfad)
            Application.DoEvents()
        Catch ex As Exception
            MsgBox("ein Fehler ist aufgetreten:" & vbNewLine & ex.ToString, MsgBoxStyle.Critical, "Fehler")
            End
        End Try
    End Sub

    Private Sub httpclient_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles httpclient.DownloadFileCompleted
        MsgBox("Download complete", MsgBoxStyle.Information, "Information")
        End
    End Sub

    Private Sub httpclient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
        Dim aTimer As New System.Timers.Timer()
        AddHandler aTimer.Elapsed, New ElapsedEventHandler(AddressOf OnTimedEvent)
        aTimer.Interval = 1000
        Dim downloadsekunden As Integer = 0

        Me.ProgressBar1.Value = e.ProgressPercentage
        Dim Totalbytes As Double = Math.Round(e.TotalBytesToReceive \ 1024 \ 1024, 2)
        Dim bytes As Double = Math.Round(e.BytesReceived \ 1024 \ 1024, 2)
        Me.Label1.Text = bytes & "MB von " & Totalbytes & "MB"
        aTimer.Enabled = True

    End Sub

    Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
        Downloadsekunden += 1
        Dim averagedownload As Integer = bytes / Downloadsekunden
        Dim restzeit As Integer = (Totalbytes - bytes) / averagedownload

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        End
    End Sub

    Private Sub Update_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If (e.Button = Windows.Forms.MouseButtons.Left) Then
            Me.Capture = False
            Me.WndProc(Message.Create(Me.Handle, &HA1, CType(&H2, IntPtr), IntPtr.Zero))

        Else : End If
    End Sub

    Public Property Bytes() As Double
        Get
            Return bytes
        End Get
        Set(ByVal value As Double)
            Me.bytes = value
        End Set
    End Property

    Public Property Downloadsekunden() As Integer
        Get
            Return downloadsekunden
        End Get
        Set(ByVal value As Integer)
            Me.downloadsekunden = value
        End Set
    End Property

    Public Property Totalbytes() As Double
        Get
            Return Totalbytes
        End Get
        Set(ByVal value As Double)
            Me.Totalbytes = value
        End Set
    End Property
End Class

ich mache noch ein screen von den warnungen die mir gezeigt werden
[Only registered and activated users can see links. Click Here To Register...]

danke im vorraus wenn ihr mir helfen würdet :)


LG vbcji
07/20/2013 01:51 f1Nn#2
Wie viele Threads möchtest du noch erstellen?

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Du solltest dir ebenfalls ordentliche Titel überlegen. Wäre der Thread auf Stackoverflow erstellt wurden, wäre er direkt gelöscht. "Updater Problem" sagt gar nichts aus, außer, dass du ein Problem hast was sowieso klar ist. Denk bitte daran in Zukunft und wähle einen gescheiten Titel.

.....
07/20/2013 13:09 vbcji#3
Quote:
Originally Posted by f1Nn View Post
Wie viele Threads möchtest du noch erstellen?

[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Du solltest dir ebenfalls ordentliche Titel überlegen. Wäre der Thread auf Stackoverflow erstellt wurden, wäre er direkt gelöscht. "Updater Problem" sagt gar nichts aus, außer, dass du ein Problem hast was sowieso klar ist. Denk bitte daran in Zukunft und wähle einen gescheiten Titel.

.....
ja sorrry.

aber eigendlich sind die anderen threds ja so gut wie gelöst...

ich habe halt nur das problem noch

kannst du mich helfen ?

lg vbcji
07/20/2013 13:37 Schlüsselbein#4
Du solltest nochmal einen Thread erstellen, so läuft das hier :)
07/20/2013 13:42 SurizeZaine#5
Quote:
Originally Posted by Schlüsselbein View Post
Du solltest nochmal einen Thread erstellen, so läuft das hier :)
Ich glaub er hats jetzt geblickt, wie wärs wenn ihr ihm einfach helft, statt immer nur dumme kommentare abzugeben?
07/20/2013 15:03 TannelTV#6
Ich Würde das ganze Mal in einen Backgrundwoker packen
07/20/2013 15:06 vbcji#7
Quote:
Originally Posted by TannelTV View Post
Ich Würde das ganze Mal in einen Backgrundwoker packen
ne ich will ja das man das sehen kann

und das problem liegt denke ich bei dem timer weil bevor ich das verscuht habe ging alles und jetzt hängt es sich glaube auf aber downloadet ja trostdem
07/20/2013 16:45 patlux#8
Lies dir doch bitte die Hinweise von Visual Studio einmal durch. Schenke dabei dem Wort "rekursiv" besondere Beachtung.

Rekursion

Die drei unten deklarierten Eigenschaften rufen sich selbst wieder auf. Dadurch entsteht eine Dauerschleife aus dem die Anwendung nicht raus kommt.

Falls du auf die drei Werte nicht öffentlich zugreifen willst, definier statt den drei Eigenschaften drei neue Variablen.

Code:
Dim bytes as Double
Dim downloadsekunden as Integer
Dim...
Und nutze diese statt den Eigenschaften.

PS: Mit VB.Net wirst du mehr leiden, als du denkst, spring so früh wie möglich auf C# um. Ein kleiner Rat.
07/20/2013 17:39 vbcji#9
also soll ich anstat der

Public Property Bytes() As Double
Get
Return bytes
End Get
Set(ByVal value As Double)
Me.bytes = value
End Set
End Property

Public Property Downloadsekunden() As Integer
Get
Return downloadsekunden
End Get
Set(ByVal value As Integer)
Me.downloadsekunden = value
End Set
End Property

Public Property Totalbytes() As Double
Get
Return Totalbytes
End Get
Set(ByVal value As Double)
Me.Totalbytes = value
End Set
End Property
End Class


soll ich dann irgend wo

dim bytes as double .... ?
07/20/2013 17:59 patlux#10
Ja, so wie du es auch mit den anderen Variablen gemacht hast:
Quote:
Private WithEvents httpclient As WebClient
Dim Pfad As String = Nothing
Dim sw As New Stopwatch
Dim received As Integer
07/20/2013 18:39 vbcji#11
Quote:
Originally Posted by patlux View Post
Ja, so wie du es auch mit den anderen Variablen gemacht hast:
ich habe keine fehler mehr...
aber wenn ich das versuche dann geht die progressbar nicht und der label der mir anzeigt MB von MB

aber es lädt runter...
habe ich irgend was falsch gemacht xD ?


:D

lg vbcji