vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Problem mit Invoke 
Autor: Caron
Datum: 01.08.11 17:21

Hallo zusammen...

Langsam bin ich echt am verzweifeln, weil ich mit meinem Downloader einfach nicht weiter komme.
Das Problem ist das ich den Download über einen Backgroundworker ablaufen lasse, und dann den Downloadstatus via Invoke in einem Label ausgeben will.

Aber genau das funktioniert nicht...
Ich bekomme immer wieder die Fehlermeldung:

Ungültiger Threatübergreifender Vorgang: Der Zugriff auf das Steuerelement Label1 erfolgte von einem anderem threat als dem Threat für den es erstellt wurde.

    Private Delegate Function refreshGUIDel()
 
    Public Function DL_Start(ByVal surl As String, ByVal sdes As String)
 
        url = surl
 
 
 
        Dim fsd As New SaveFileDialog
        'fsd.ShowDialog()
        des = sdes
 
        If IO.File.Exists(des) Then
            curBytes = IO.File.ReadAllBytes(des).Length
            totBytes = curBytes
        End If
 
        worker.WorkerSupportsCancellation = True
        worker.RunWorkerAsync()
 
 
    End Function
 
    Public Sub doWork(ByVal sender As Object, ByVal e As _
      System.ComponentModel.DoWorkEventArgs) Handles worker.DoWork
        timer = New Stopwatch
 
        'Stream zur Datei im Internet erstellen und Lokal
        Dim request As HttpWebRequest = HttpWebRequest.Create(url)
 
        '###################
        'Download fortsetzen falls curBytes > 0
        request.Proxy = Nothing
        request.AddRange(CInt(curBytes))
 
        Dim response As HttpWebResponse = request.GetResponse
 
        If Not response.StatusCode = HttpStatusCode.PartialContent Then
            'falls der Server wiederaufnahme nicht unterstützt bei 0 anfangen
            curBytes = 0
        End If
        '###################
 
        bis = response.GetResponseStream
        If curBytes > 0 Then
            fos = New FileStream(des, FileMode.Append, FileAccess.Write)
            totBytes = response.ContentLength + curBytes
        Else
            fos = New FileStream(des, FileMode.Create, FileAccess.Write)
            totBytes = response.ContentLength
        End If
 
        timer.Start()                       'Mit dem Timer messen wir, wieviele 
        ' Bytes in der letzten Sekunde heruntergeladen wurden
        Try
            While (True)
                readBytes = bis.Read(buffer, 0, buffer.Length)      'Aus dem 
                ' Download Stream lesen
                If readBytes = 0 Then
                    'MessageBox.Show("fertig")
                    DL_fertig()
                    Exit While                                      'Download 
                    ' ist abgeschlossen
                End If
 
                fos.Write(buffer, 0, readBytes)                     'Geladene 
                ' Bytes lokal Speichern
 
                curBytes += readBytes                               'Anzahl 
                ' gesammt gelesener Bytes erhöhen
                loaded += readBytes                                 'Anzahl der 
                ' Bytes erhöhen die in der Letzten Sekunde geladen wurden
 
                If timer.ElapsedMilliseconds >= 1000 Then           'Wenn 
                ' eine Sekunde vergangen ist
                    speed = 0
                    speed = FormatNumber(loaded / 1024, 2)          _
                      'Geschwindigkeit berechnen
                    loaded = 0                                      'und zähler 
                    ' zurücksetzen
                    timer.Reset()                                   'den Timer 
                    ' neustarten
                    timer.Start()
                End If
                'Die Anzeige im Formular-Thread aktualisieren
                Label1.Invoke(New refreshGUIDel(AddressOf refreshGUI), New _
                  Object() {})
 
            End While
        Catch ex As Exception
            MsgBox(Prompt:="Fehlercoding: " & ex.Message)
        End Try
        'Ressourcen Freigeben
        timer.Stop()
        fos.Close()
        bis.Close()
    End Sub
 
    Private Sub workerDisposing(ByVal sender As Object, ByVal e As _
      System.EventArgs) Handles worker.Disposed
        'Die Streams schließen, da sonst die temporäre Datei nicht gelöscht 
        ' werden kann!
        fos.Close()
        bis.Close()
    End Sub
 
 
 
 
    Public Function refreshGUI()
        'Die Fortschrittsanzeige aktualisieren
        Me.ProgressBar1.Maximum = totBytes
        Me.ProgressBar1.Value = curBytes
 
        Me.Label1.Text = FormatNumber(curBytes / 1024, 0) & " / " & _
          FormatNumber(totBytes / 1024, 0) & " Geschwindigkeit: " & speed & "" & _
          "KB/s"
 
 
    End Function
 
 
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        'Wenn das Formular geschlossen wird während der Download noch läuft, 
        ' diesen erst beenden und Ressourcen freigeben
        If worker.IsBusy Then
            worker.CancelAsync()
            worker.Dispose()
        End If
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem mit Invoke1.137Caron01.08.11 17:21
Re: Problem mit Invoke775Manfred X01.08.11 19:03
Re: Problem mit Invoke690Caron07.08.11 09:54

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel