Event Sub End

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von zoranmaric.

    Wenns nicht Asynchron sein muss, kannst du einfach am Ende deiner Prozedur bzw. direkt nach dem Aufrufen eine Meldung ausgeben (oder ein Event auslösen):

    VB.NET-Quellcode

    1. Sub Test()
    2. 'Mach irgendetwas, was lange dauert
    3. '...
    4. MessageBox.Show("Fertig!") 'oder Aufrufen einer anderen Prozedur etc.
    5. End Sub

    oder falls du die Sub nicht selbstgeschrieben hast (Api etc.):

    VB.NET-Quellcode

    1. Sub Aufrufen()
    2. IrgendEinLangDauernderVorgang()
    3. MessageBox.Show("Fertig!") 'oder Aurufen einer anderen Prozedur etc.
    4. End Sub


    Soll das ganze Asynchron sein, kannst du ja das RunWorkerCompleted-Event des BackgroundWorkers nehmen.

    ―Kai
    Diese Sub wird durch ein SerialDataReceivedEventArgs ausgelöst wenn Daten von der RS 232 empfangen wurden. Dann erfolgt eine Bearbeitung durch die Sub. Ich will dann eine neue Anfrage senden wenn alles in der Sub abgearbeitet ist.

    VB.NET-Quellcode

    1. Private Sub Receiver(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles COMPort.DataReceived
    2. ' ervolgt die Bearbeitung der Daten
    3. call Anfrage ()
    4. End Sub

    mit call ist nicht ganz korrekt :S

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „zoranmaric“ ()

    Hab' zwar noch nie damit gearbeitet, aber ich geh' mal davon aus, dass das über einen anderen Thread arbeitet und dauernd ausgelöst wird. Wär's da (abhängig vom Verwendungszweck) nicht besser, die Daten zu puffern und anschließend in nem anderen Thread abzuarbeiten?
    Wie läuft das bei COMPort? Gibt's eine Methode, um auf neue Daten zu warten? Dann würde ich einfach einen System.Threading.ThreadPool-Thread dazu verwenden, um in einer Schleife auf Input zu warten und anschließend zu verarbeiten. Damit wird die Reihenfolge beibehalten.
    In VB.Net ist Call übrigens überflüssig, eine Methode wird einfach durch <Methodenname>[(<parameter>)] übergeben.

    Gruß
    ~blaze~
    1.
    Zitat aus dem Title:
    [VB 2010]
    Zitat aus deinem Code:
    call Anfrage ()

    You don't say? VB6

    BTT: teoretisch ist es unmöglich (wenn ichs richtig verstehe) da der sub von oben bis unten abgearbeitet wird also

    sub()
    mache a
    mache b
    mache c
    end sub

    wenn man jetzt also am ende des subs einen anderen aufruft wäre das ja

    sub()
    mache a
    mache b
    mache c
    mache sub bla()
    sub bla: mache asdf
    end sub bla()
    end sub

    oder irre ich mich hier gewaltig ?

    VB.NET-Quellcode

    1. Private Sub Receiver(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles COMPort.DataReceived
    2. ' erfolgt die Bearbeitung der Daten
    3. call Anfrage ()
    4. ' Hier in dieser Zeile kannst Du schon was neues antriggern
    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!
    Auch wenn Du Pseudo-Code schreibst, dann bitte so, dass er verständlich ist, denn dies ist Dein Thread.
    Der Aufruf des Events COMPort.DataReceived kommt von einem Interrupt, da ist das System für zuständig. Dichter kommst Du ohne separaten und und unnützen Aufwand nicht an das Ende der Interruptprozedur:

    VB.NET-Quellcode

    1. Private Sub Receiver(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles COMPort.DataReceived
    2. ' erfolgt die Bearbeitung der Daten
    3. Call Anfrage ()
    4. Call MySub()
    5. End Sub
    6. Private Sub MySub()
    7. ' noch etwas tun
    8. 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!