Public delegates zulässig?

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    Public delegates zulässig?

    Hi,

    ich habe eine asynchrone Funktion, die bei Abschluss der Berechnungen Daten in der UI anpassen soll. Nach etwas Recherche bin ich dazu gekommen ein Delegat zu nutzen um Cross-Threading-Probleme zu vermeiden.

    So schaut das aus:

    VB.NET-Quellcode

    1. ​Private Delegate Sub DoStuffDelegate(ByRef scanData As String)
    2. Private Sub processScannedData(ByRef scanData As String)
    3. If Me.InvokeRequired Then
    4. Me.Invoke(New DoStuffDelegate(AddressOf processScannedData), scanData)
    5. Else
    6. TbEntry.Text = scanData
    7. End If
    8. End Sub


    Wenn die Funktion die processScannedData aufruft und in der gleichen Klasse ist, funktioniert alles problemlos. Jetzt möchte ich zur besseren Lesbarkeit einen Teil des Quellcodes in ein Modul auslagern. Wenn ich processScannedData als public deklariere lässt sich die Funktion auch aufrufen und wird laut Haltepunkt auch durchlaufen. Allerdings wird ​TbEntry.Text = scanData nie ausgeführt, bzw. ändert sich der Text nicht.
    Mein Verständnis von MT-Anwendungen ist aktuell leider noch sehr rudimentär.
    Option strict = on

    If it's stupid and it works it ain't stupid.
    @Nils_Kr Public Delegate ist nicht das Problem, eher das Module.
    Kannst Du das in ne Klasse packen?
    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!
    Das würde auch gehen, allerdings passt das Modul eigentlich besser, da alle Funktionen statisch sind und ich keine Objekte generiere. Prinzipiell wäre es auch kein Weltuntergang die Funktionen einfach in der Hauptklasse stehen zu lassen,
    ich würde nur gerne verstehen, wo das Problem liegt.
    Option strict = on

    If it's stupid and it works it ain't stupid.
    Wahrscheinlich weil Me effektiv nur für eine Klasseninstanz definiert ist. Keine Ahnung, was bei nem Modul da rauskommt. Aber n Invoke wird ja (v.a.) für Forms gebraucht.

    ##########

    daher müsstest Du der Modulprozedur noch das betroffene Form als Parameter reinreichen und dieses statt Me verwenden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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