title image


Smiley Re: VB2005: Ungültiger threadübergreifender Vorgang. Was nun?
Ich hab's inzw. sogar über den Backgroundworker erledigt. Trotzdem Thx für den Tipp! Ich verstehe zwar nicht ganz, warum das mit dem geht, aber nungut... Es funzt. Förder zwar Wusel-Code, aber naja... Bis jemandem Mal was besseres eingefallen ist, werd' ichs so beibehalten. Falls es dich interessiert:









Imports System.ComponentModel



Public Class Form1

    Private WithEvents myJustDoSomething As JustDoSomething



    'Beginnen, wenn ein Button gedrückt wurde

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

        myJustDoSomething = New JustDoSomething()     'Neue Instanz meiner Klasse erzeigen

    End Sub



    'Darauf reagieren, wenn meine Klasse das Ereignis "MessageReceived" wirft

    Private Sub myJustDoSomething_RemotePCSentUsAMessage(ByVal sender As JustDoSomething, ByVal message As String) _

              Handles myJustDoSomething.RemotePCSentUsAMessage

        TextBox1.Text = message 'Textbox mit dem vom Ereignis übergebenen String "message" füllen

    End Sub

End Class



Public Class JustDoSomething 'Meine Klasse, in der asynchrone Vorgänge stattfinden sollen

    Private _Owner As Form

    Public Event RemotePCSentUsAMessage(ByVal sender As JustDoSomething, ByVal message As String)



    Private Enum meineEvents

        RemotePCSentUsAMessage = 1

        RemotePCClosedConnection = 2

        '...

    End Enum



    Public Sub New()

        Dim myBackWorker As New BackgroundWorker

        myBackWorker.WorkerReportsProgress = True

        AddHandler myBackWorker.DoWork, AddressOf myBackWorker_DoSomethingAsynch

        AddHandler myBackWorker.ProgressChanged, AddressOf myBackWorker_RaiseEvents

        myBackWorker.RunWorkerAsync()



    End Sub



    Private Sub myBackWorker_RaiseEvents(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)

        Select Case DirectCast(DirectCast(e.ProgressPercentage, meineEvents), meineEvents)

            Case meineEvents.RemotePCSentUsAMessage

                RaiseEvent RemotePCSentUsAMessage(Me, DirectCast(e.UserState, String))

            Case meineEvents.RemotePCClosedConnection

                '...

        End Select

    End Sub



    Private Sub myBackWorker_DoSomethingAsynch(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)

        'Irgendetwas asynchrones tun und dann ein Ereignis auslösen

        DirectCast(sender, BackgroundWorker).ReportProgress(DirectCast(meineEvents.RemotePCSentUsAMessage, Integer), "Empfangene Nachricht")



    End Sub

End Class







Code eingefügt mit Syntaxhighlighter 4.0







Gruss,

Tobias


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: