Thread Werte (in einer Klasse) in der Form verwenden

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Blitzbirnep.

    Thread Werte (in einer Klasse) in der Form verwenden

    Hallo liebe community ;) ,

    ich hab ein "kleines" Problem ?( , undzwar versuche ich zurzeit eine Klasse zu erstellen die mehrere sachen erledigt, diese sachen werden im threads erledigt, ebenfalls werden die klassenevents im thread ausgelöst.

    Jetzt könnt ihr euch sicher vorstellen was passiert, wenn ich in meiner form im event mit den ergebnissen weiterarbeiten will... :S

    "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement TextBox4 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde." :cursing:

    So das problem lässt sich natürlich in der form lösen mit einem delegaten und me.invoke, klappt auch super, meine absicht ist es aber diese klasse so einfach wie möglich zur handhabung zu gestalten sodass der nutzer der späteren Dll in seiner form nicht erst einen delegaten eine sub und und und erstellen muss und an der richtigen stelle verwenden muss. :!:

    Lange rede kurzer sinn ich möchte das die werte in der Klasse schon sofort im richtigen thread übereben werden sodass die events ohne delegates verwendet werden können, also sprich eine art invoke in der klasse zu machen. ?(

    Geht sowas oder muss ich da mit anderen methoden ran gehen oder im schlimmstenfalle müsste ich die dll fertigstellen und dem user zumuten es mit delegates zu versuchen?!?!? :pinch:

    Liebe Grüße Blitzbirnep :) :)

    Blitzbirnep schrieb:

    Lange rede kurzer sinn ich möchte das die werte in der Klasse schon sofort im richtigen thread übereben werden sodass die events ohne delegates verwendet werden können, also sprich eine art invoke in der klasse zu machen.

    Geht. VB hat einen versteckten Delegate zu jedem Event.
    Wenn das Event "MeinEvent" heißt, heißt der versteckte Delegate "MeinEventEvent".

    Schaue er zb hier: [VB 2010] Threads & GUI, aber .invokeRequired nicht möglich
    es ist schnurz, welches Control du zum Invoken hernimmst. Daher kannst du dich einfach bei Application.OpenForms bedienen.

    ich möchte das die werte in der Klasse schon sofort im richtigen thread übereben werden sodass die events ohne delegates verwendet werden können
    Dieses ist in der AsyncWorker - CodeProject-KomplettLösung mitgelöst.
    Ja sorry war unaufmerksam ich natürlich heißt mein event nich foo :D sondern anders hab den namen auch umgeändert, nur hab ich nicht gemerk das im code fooeevent steht sonder hab das "event" vergessen jetzt klappt es nochmal an alle danke ;) ;) :thumbsup:

    ihr seid echt die besten !



    EDIT:

    Beim weitern schreiben meines codes ist mir aufgefallen das es nützlich wäre dass dieses event mit Parametern übergeben wird wenn ich das jetzt aber mache

    Spoiler anzeigen


    VB.NET-Quellcode

    1. Private Sub RaiseOnGetData(ByVal sn As String)
    2. For Each d As [Delegate] In OnGetDataEvent.GetInvocationList
    3. If TypeOf d.Target Is Control AndAlso DirectCast(d.Target, Control).InvokeRequired ThenDirectCast(d.Target, Control).BeginInvoke(OnGetDataEvent)
    4. ElseRaiseEvent OnGetData(sn)
    5. End If
    6. Next
    7. End Sub




    das problem hierbei ist das jetzt die fehlermeldung "Parameteranzahlkonflikt."

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