Background worker mit Threadübergreifenden vorgang?

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Banana_Joo.

    Background worker mit Threadübergreifenden vorgang?

    Moin Community ;)

    Ich hätte wieder mal eine Frage :)

    Ich benutze zu zeit den Backgroundworker.
    Nur das Problem ist das die Funktionen die ausgeführt werden Labels beschreiben.
    Wie mach ich das das der Backgroundworker das ausführt? Ohne es zu überspringen oder gar ein Fehler raus zu geben.

    Ich lese in vielen Threads immer mit Invoke. Aber hab um ehrlich zu sein nie ein richtiges Beispiel gefunden.
    Und Backgroundworker ist zu zeit bisschen neu für mich.

    Ich würde mich um paar Tipps Freuen.

    Danke schon mal im voraus.

    mfg
    Banana
    Suchergebnisse
    Suchergebnisse 1-30 von insgesamt 1 000 für »Invoke«. Es gibt noch weitere Suchergebnisse, bitte verfeinere deine Suche.
    Diese Suchbegriffe wurden hervorgehoben: Invoke

    1. Fundstelle:

    VB.NET-Quellcode

    1. Me.Invoke(Sub() Me.Text = "Foo.Bar")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Genau dort, wo Du auf die Controls zugreifst.
    Statt

    VB.NET-Quellcode

    1. Me.Text = "Foo.Bar"
    schreibst Du

    VB.NET-Quellcode

    1. Me.Invoke(Sub() Me.Text = "Foo.Bar")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke danke :D

    nur jetz kommt das hier


    Message=Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
    Source=System.Windows.Forms

    Was verwunderlich ist das ich den Backgroundworker erst aktiviere nachdem alles geladen ist und die form angezeigt ist oO.
    Wie kann denn so ein Fehler erscheinen.

    Was kann ich dagegen machen?

    EDIT:
    liegt es daran das die Funktion in einem Modul ist? bei mir sieht es dann so aus.

    Beispiel.

    VB.NET-Quellcode

    1. form1.label1.Invoke(Sub() form1.lbox1.Items.Add(TimeOfDay + ": BLABLABLA!"))



    EDIT2:
    Wenn das in der Form direkt ist funktioniert es.Aber vom Modul aus gehts nicht :(

    mfg

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Banana_Joo“ ()

    Kann sein, mach da mal eine Klasse draus.
    Module sind noch ein Relikt aus der Steinzeit und nur noch für Befehlserweiterung zu gebrauchen.
    An welcher Stelle startest Du denn den BGW?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In der ersten Form von nem Button aus.
    Button Aktiviert Backgroundworker und Backgroundworker dann die Funktion im Modul.
    Ich werd es mal mit der Klasse versuchen

    EDIT:
    Auch mit der Klasse funktioniert das nicht :(..

    mfg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Banana_Joo“ ()

    Wie meinst du das?
    Der BGW ist in der Form-Klasse.
    Nur da kann man doch eine BGW erstellen.

    Oder meinst du etwa was anderes?

    mfg


    EDIT:
    Die ganzen funktionen in dem Modul den ich benutze in die Form Klasse zu verschieben wär total öde :( und ein Code Salat.
    Das Problem ist das ich von der bsp:Form1 den BGW aktiviere.

    Der BGW aktiviert aber eine Funktion die in einem Modul ist oder halt in einer Klasse. Ist ja auch egal.
    Aber beides geht nicht.

    Und damit es funktioniert müsste ich die Funktion die der BGW aktiviert in die Form-Klasse verschieben.
    Und das würde ich gerne NICHT tun^^

    mfg
    Das weiß ich :)...benutze ich auch schon im Modul.

    Aber du kannst es vllt verstehen.
    Es wäre eine riesen arbeit wo ich bei den Codes zb: form1.blabla geschrieben habe. wieder zu blabla zu schreiben ;)..

    Aber wenn mir nichts anderes bleibt...wie gesagt dann bleibt mir nichts übrig :)


    mfg

    Banana_Joo schrieb:

    Der BGW aktiviert aber eine Funktion die in einem Modul ist oder halt in einer Klasse.

    Mach aus diesem Modul eine Klasse und gib ihm eine Referenz auf die anzeigende Form mit.
    Nicht

    VB.NET-Quellcode

    1. Form1.Textbox1.Text = "bla"
    sondern

    VB.NET-Quellcode

    1. Public Sub Start(frm As Form1)
    2. ' ...
    3. frm.Invoke(Sub() frm.Textbox1.Text = "bla")
    4. ' ...
    5. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Function slot4s(ByVal frm As form1)
    2. frm.Invoke(Function() form1.lbox.Items.Add(CStr(TimeOfDay) + ": BlaBla"))
    3. End Function


    So hab das getestet und keine änderung :(...

    Auch mit nem Normalen Sub hab ich das getestet und funktioniert auch nicht.

    mfg
    Poste mal Deinen ganzen Code hoch, wenn er nicht zu lang ist
    Oder
    Mach ein kleines Testprogramm, in dem Dein Effekt passiert und poste dieses.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!