| |

VB.NET - FortgeschritteneProblem 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 |  |
 | 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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
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
|
|