auf evt. Antwort warten

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von gs93.

    auf evt. Antwort warten

    Hallo,



    wie mache ich es am geschicktesten wenn ich auf eine Antwort eines Gerätes warten möchte

    welches einige Millisekunden benötigt um zu antworten?



    heißt:



    ich schicke z.B. "hallo" über die Schnittstelle und nach einiger Zeit kommt "hier" zurück



    wenn ich schreibe





    Quellcode

    1. serialport1.writeline("Hallo")
    2. if neuenachricht = "hier" then
    3. ....mach was
    4. endif




    dann ist das viel zu schnell vom Programmablauf.



    also müsste ich irgendwie hinter dem senden ein "wait!" einfügen in Form einer Schleife oder

    so, ist das richtig? oder wie löse ich das Problem am geschicktesten ?



    danke Speedy
    also



    Ja, ich erwarte immer eine Antwort, denn mein Gegenstück schickt immer wenns was empfangen hat!



    das mit dem Thread auslagern dachte ich mir schon!



    leider habe ichs noch nicht kappiert wie das funzt!



    dim thread as new threading.thread(adrees of xxx) ....soweit aber nicht weiter!
    Hallo

    Wenn du nicht mit Invoke arbeiten willst,kannst du auch mit einen Timer die Variable auslesen,welche in Data Receiver gefüllt wurde.

    Habe hier im Hardwareforum irgendwo eine Zip mit senden und empfangen.

    P.S. wenn du sendest und sofort eine Antwort erwartest, kannst du auch Ohne Data Event arbeiten und direkt einlesen.
    Ist manchmal einfacher.

    Gruß
    @fraju: Eig. steht das auch auf der Webseite aber na gut. Weil dus bist^^
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Public Delegate Sub nachrichtDelegate(ByVal nachricht As String) 'nur bei Möglichkeit 2 nötig
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim bgw As New System.ComponentModel.BackgroundWorker 'Backgrpundworker erstellen
    6. AddHandler bgw.DoWork, AddressOf bgw_DoWork 'hatte keinen Bock auf WithEvents xD
    7. bgw.WorkerReportsProgress = True 'nur bei Möglichkeit 1 nötig
    8. AddHandler bgw.ProgressChanged, AddressOf bgw_Progress 'nur bei Meöglichkeit 1 nötig
    9. bgw.RunWorkerAsync() 'bgw starten
    10. End Sub
    11. Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
    12. Dim nachricht As String = Nothing
    13. While nachricht = Nothing
    14. 'hier die Abfrage
    15. 'evtl. noch Sleep einbauen
    16. End While
    17. CType(sender, System.ComponentModel.BackgroundWorker).ReportProgress(0, nachricht) '1. Möglichkeit: ReportProgress des bgw nutzen
    18. Me.Invoke(New nachrichtDelegate(AddressOf nachrichtEmpfangen), nachricht) '2. Möglichkeit: Delegates
    19. End Sub
    20. Private Sub bgw_Progress(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) 'nur bei Möglichkeit 1 nötig
    21. MessageBox.Show(e.UserState.ToString()) 'nun wird die Nachricht ausgegeben
    22. End Sub
    23. Private Sub nachrichtEmpfangen(ByVal nachricht As String) 'nur bei Möglichkeit 2 nötig
    24. MessageBox.Show(nachricht) 'nun wird die Nachricht ausgegeben
    25. End Sub
    26. End Class

    Getestet hab ichs nicht :whistling:
    ja, mir erscheint das mit dem delegate wohl die sauberste Lösung zu sein!



    mit einem Timer die variable abfragen wäre natürlich auch ne Möglichkeit, gefällt mir aber nicht wirklich

    außerdem kann ich ja nicht alle ms in nen Timer springen...



    das Probl. mit delegate ist nur das es bei mir in den Kopf rein muss!

    ich werde mir das mit den Links hier im Thread nochmal reinziehen

    vielleicht bleibt ja bald mal was hängen.... denke es ist einfach die

    beste Lösung wenn auch die schwierigste!



    Speedy
    Hallo gs93


    Wenn ich diese Variable "nachricht" mit einen Str. lade werden die Msg Boxen 1 mal aufgerufen.
    Danach nicht mehr.
    Na,ja hat mich eben mal Interessiert,
    Werde es dann später noch mal durchkauen.



    Eig. steht das auch auf der Webseite aber na gut. Weil dus bist


    Bin ich was Besonderes ,oder zähle ich zu den Exoten ;)


    P.S.Hallo speedy
    Zum Leidwesen bietet VB soviel an ,das man 99% wieder Vergessen kann ,wenn man es 100%
    beherrschen würde.;-))

    Gruß