Sub reagiert trotz Exit Sub

23/10/2009 - 22:08 von Raimo Becker | Report spam
Hallo NG,

ich habe eine Anwendung die auf das MSComm1_OnComm reaComgiert.
Sobald der CommBuffer ein "Error" enthàlt soll das Ding verlassen werden.

TeilCode:

Private Static Sub MSComm1_OnComm()
On Error Resume Next

Dim EVMsg As String
Dim ERMsg As String
Dim Eingabe As String
Dim Teil1 As String
Dim Teil2 As String
Dim strComInBuffer As String

Select Case MSComm1.CommEvent
' Ereignis-Meldungen
Case comEvReceive

If ComAktiv Then

LBL = gsMessages(1761)
Eingabe = MSComm1Input

ComInBuffer = ComInBuffer + Eingabe



' Fehlerüberprüfung am Geràt

If InStr(1, ComInBuffer, "error1") > 0 And Not bFlagError =
True Then
MsgBox gsMessages(2005)
bFlagEnd = True
bFlagError = True ' den erkennt er an
Unload Me ' will nicht funktionieren
Exit Sub ' will auch nicht tun
end if

da das Geràt jetzt 11 mal Error sendet, bekommt der User auch 11 MsgBoxen.
Das ist too much information!
Mein Problem ist: Im VB-Editor làuft es wie gewollt. Einmal in einen Error
-> MsgBox dann raus aus dem Form ,Commport geschlossen.
Wenn ich aber das Projekt in eine exe kompiliere laufe ich auf die 11-fache
Fehlermeldung.

Liegt das am Private Static?
und wenn ja, wie komme ich da raus???

Gruß
Raimo
 

Lesen sie die antworten

#1 Peter Götz
24/10/2009 - 11:32 | Warnen spam
Hallo Raimo,

ich habe eine Anwendung die auf das MSComm1_OnComm
reaComgiert. Sobald der CommBuffer ein "Error" enthàlt soll
das Ding verlassen werden.

TeilCode:

Private Static Sub MSComm1_OnComm()
On Error Resume Next

Dim EVMsg As String
Dim ERMsg As String
Dim Eingabe As String
Dim Teil1 As String
Dim Teil2 As String
Dim strComInBuffer As String

Select Case MSComm1.CommEvent
' Ereignis-Meldungen
Case comEvReceive

If ComAktiv Then

LBL = gsMessages(1761)
Eingabe = MSComm1Input



Wer oder was ist "MSComm1Input"?
Ist das eine Variable oder ein Tippfehler?


ComInBuffer = ComInBuffer + Eingabe



' Fehlerüberprüfung am Geràt

If InStr(1, ComInBuffer, "error1") > 0 And Not bFlagError > True Then
MsgBox gsMessages(2005)



MSComm arbeitet in einem separaten Thread.
Wàhrend Deine MsgBox am Bildschirm sichtbar
ist, löst MSComm evtl. weitere Ereignisse aus,
die momentan von Deinem Hauptthread, der
gerade durch die MsgBox blockiert ist, (noch)
nicht abgearbeitet werden.


bFlagEnd = True
bFlagError = True ' den erkennt er an
Unload Me ' will nicht funktionieren



Wenn MSComm1, was ich vermute, ein Control auf Deiner
Form "Me" ist, dann solltest Du MSComm1 noch vor der
Ausgabe der Msgbox schliessen (Close), damit nicht weitere
Ereignisse eintreffen und nachdem die MsgBox vom Benutzer
geschlossen worden ist Deine Form schliessen.

Exit Sub ' will auch nicht tun



Würde schon "tun", aber da weitere neue Ereignisse eintreten
wird Deine Sub eben immer wieder neu aufgerufen.

end if

da das Geràt jetzt 11 mal Error sendet, bekommt der User
auch 11 MsgBoxen.



Ja, genau das macht Dein obiger Code.

Das ist too much information!
Mein Problem ist: Im VB-Editor làuft es wie gewollt. Einmal
in einen Error -> MsgBox dann raus aus dem Form ,Commport
geschlossen.



s.oben:
Erst CommPort schliesen, dann MsgBox dann evtl. die Form
schliessen.

Wenn ich aber das Projekt in eine exe kompiliere laufe ich
auf die 11-fache Fehlermeldung.

Liegt das am Private Static?



Nein, das liegt an Deinem unpassenden Ablaufkonzept.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen