title image


Smiley VB.NET Suche Hilfe für:Cross-thread operation not valid
Hi,

habe ein kleines Programm geschrieben und bin über Cross-thread gesolpert.

Habe es vereinfacht um das Problem besser verstehen zu können.

Habe aber leider immer noch keine Lösung. Wer kann mir bitte weiterhelfen.

Ziel ist es einen Thread zu starten wobei die Klasse als Backgroundworker definiert ist und Ereignisse für die ProgressBar ausgelöst werden. Eigentlich simple, aber aber einen Denkfehler brauch Eure Hilfe:

Danke und Gruß Mc_Ora



Imports System.Threading

Imports System.ComponentModel



Public Class Form1

Dim WithEvents t As New test



Delegate Sub SetTextCallback(ByVal [text] As System.Object, ByVal [text2] As ProgressChangedEventArgs)





Private Sub ProgressChanged(ByVal sender As System.Object, ByVal e As ProgressChangedEventArgs) Handles t.ProgressChanged '.ProgressChanged 'fileTransferUpload1.ProgressChanged

'// update the progress bar and status bar text

'Version 2 threadsicher aber es schein ein Deadlock zu geben

'If StatusStrip1.InvokeRequired Then

' Dim d As New SetTextCallback(AddressOf ProgressChanged)

' Me.Invoke(d, New Object() {[Text]})

'Else

' ToolStripProgressBar1.Value = e.ProgressPercentage

' ToolStripStatusLabel1.Text = e.UserState.ToString()

'End If

'Version 1 ergibt Fehlermeldung:Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.

ToolStripProgressBar1.Value = e.ProgressPercentage

ToolStripStatusLabel1.Text = e.UserState.ToString() '// summary text is sent in the UserState parameter

End Sub



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

Dim mythread As New Threading.Thread(AddressOf t.testsub)

t.WorkerReportsProgress = True

Label1.Text = "Start"

mythread.Start()

mythread.Join()

Label1.Text = "Fertig"

End Sub

End Class



Public Class test

Inherits BackgroundWorker



Public Sub testsub()

Dim i As Integer

Dim max As Integer = 100

For i = 0 To max

Thread.Sleep(50)

ReportProgress(i, "Erledigt " & i & " von " & max)

Next

End Sub



End Class

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: