VB2010: BackGroundWorker Code in eigene Klasse/Modul - aber wie??

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    VB2010: BackGroundWorker Code in eigene Klasse/Modul - aber wie??

    Hallo Zusammen

    Ich habe schon öfters mit BackGroundWorkern in VB2010 gearbeitet. Die Funktionsweise ist mir bekannt.
    Jetzt habe ich ein Projekt vor wo ich mit mehr als 10 Backgroundworkern arbeiten möchte.
    Da ich nicht sämtlichen Quellcode in Form1.vb schreiben möchte dachte ich mir ich lege zusätzliche Codefiles an, damits übersichtlicher wird.
    Aber leider bekomme ich immer die Fehlermeldung "Die Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert wird".
    Google hat mir leider nicht so recht weitergeholfen

    Den Backgroundworker habe ich aus der Toolbox auf meine Form vorher gezogen und in BGW_002 umbenannt, Modifiers=Friend.
    Hier mein Quellcode den ich in eine separate .vb-Datei geschrieben habe.

    Visual Basic-Quellcode

    1. Imports System.ComponentModel
    2. Public Module m1
    3. Public Sub BackgroundWorker002_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW_002.ProgressChanged
    4. Dim test As Integer
    5. test = test + 1 'diese Zeile eingefügt damit ein Breakpoint gesetzt werden kann
    6. End Sub
    7. Public Sub BackgroundWorker002_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_002.DoWork
    8. Dim test As Integer
    9. test = test + 1 'diese Zeile eingefügt damit ein Breakpoint gesetzt werden kann
    10. End Sub
    11. Public Sub BackgroundWorker002_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGW_002.RunWorkerCompleted
    12. Dim test As Integer
    13. test = test + 1 'diese Zeile eingefügt damit ein Breakpoint gesetzt werden kann
    14. End Sub
    15. End Module


    Irgendwie hakts da bei mir noch am Verständnis mit Module, Klassen, Public/Private/Shared usw. ?(

    Aus Form1.vb möchte ich dann den Backgroundworker aufrufen mittels

    Visual Basic-Quellcode

    1. BGW_002.RunWorkerAsync()
    .
    Muss ich dazu in Form1.vb noch irgendwas in der Art wie Imports xy oder so einfügen?

    Ich hoffe ihr könnt mir weiterhelfen.

    Gruß,
    Felix
    Erstmal: die BackgroundWorker-Komponente ist einfach schrott - war sie schon immer.

    Dann korrigiere mal das ThreadLabel - ich denke ja nicht, dass du deine Frage für VB6 beantwortet haben möchtest.

    Und falls du mit .Net4.5 labeln kannst, steht dir sogar der Async-Await-Pattern zur Verfügung - das ist was besonders feines fürs Threading.
    Danke für den Hinweis. Arbeiten tu ich mit VB2010.

    Aber wie schaff ich es denn nun, dass ich meine Backgroundworker-Routinen in ein eigenes Codefile schieben kann ohne dass ich Fehlermeldung erhalte: "Die Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert wird"?

    Vielen Dank schon mal.
    Da musste die Handles-Klausel wegmachen, weil die Handles-Klausel erfordert eine WithEvents-Variable, die im enthaltenden Typ oder einem seiner Basistypen definiert ist.

    Mir scheint, da musst du dir noch erheblich Grundlagenwissen anschaffen, wenn du Handles-Klasuseln hinschreibst, wo gar keine Objekte sind, deren Events behandelt werden könnten, mit der Handles-Klasusel.
    zunächstmal paar Begriffe klären, wie Klausel, Withevents, Variable, (Daten)Typ, Basis-(daten)Typ: Grundlagen: Fachbegriffe
    vlt. auch Alles über Events

    Oder such dir gleich ein gutes Gratis-Buch aus: Entwickler-Ressourcen und Tools, Bücher und WebCasts