vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Threads, events und invoke 
Autor: J4nosch
Datum: 05.01.11 16:50

Hallo zusammen,
schreibe gerade ein Programm, welches über die serielle Schnittstelle mit einem Modem kommuniziert.
Für dem Empfang von Daten nutze ich das DataReceived-Event der seriellen Schnittstelle.
Der Versand von Daten erfolgt zyklisch und wird durch das Tick-Event eines Timers angestossen.
Da aus beiden Methoden auf die Programmoberfläche zugegriffen werden muss habe mit Delegates und Invoke gearbeitet.
Jetzt habe ich das Problem, dass ich im datensendenden Thread (Tick-Event) auf eingehende Daten an der seriellen Schnittstelle warten will. Dafür habe ich mir eine boolean-Variabel im Hauptprogramm angelegt, auf die aus beiden Routinen zugegriffen werden kann.
Im datensendenden Thread sollte nun eine While-Schleife darauf warten, dass die variabel vom Datenempfangs-Thread auf "False" gesetzt wird.
Und hier habe ich scheinbar etwas nicht richtig verstanden, denn wenn der datensendende Thread in die while-Schleife kommt, wird nicht nur dieser Thread, sonder das gesammte Programm blockiert und der Empfangs-Thread bzw. das DataReceived-Event wird nicht mehr ausgeführt und damit die Variable nicht auf "False" gesetzt.
Hier mal ein paar Ausschnitte meines Codes, vielleicht kann mir ja jemand weiterhelfen:

Private Delegate Sub DelegateSub()
Private Reci As New DelegateSub(AddressOf Recieve)
Private Send As New DelegateSub(AddressOf Senden)
Dim sendSema As Boolean = False
...
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As 
  System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
 
   portbuf = SerialPort1.ReadExisting()
   Try
        Me.BeginInvoke(Reci)
   Catch ex As Exception
        ...
   End Try
 
End Sub
Private Sub Recieve()
...
   if portbuf = "bla" then
   '''''hier soll die Variable eigentlich zurückgesetzt werden
        sendSema = False
   end if
...
End Sub
......
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Timer1.Tick
   Me.BeginInvoke(Send)
End Sub
Private Sub Senden()
...
   sendSema = True
   ''''Hier hängt sich mein Programm auf ;(
   While sendSema = True
   End While
...
End Sub
Meinem Verständnis nach erstellt ein Event doch einen neuen Thread, der, wenn er blockiert wird (while-Schleife), nicht den Hauptthread blockieren sollte. Aber vielleicht kann mich hier ja jemand eines besseren belehren.
Schon mal vielen Dank für die Aufmerksamkeit und mögliche Lösungsansätze.
MFG Janosch
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Threads, events und invoke1.107J4nosch05.01.11 16:50
Re: Threads, events und invoke674ModeratorFZelle06.01.11 00:26

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel