Saturday, December 26, 2009

Sub reagiert trotz Exit Sub
















Betreff Sub reagiert trotz Exit Sub
Von =?Utf-8?B?UmFpbW8gQmVja2Vy?=
Datum 23.10.2009 22:08:01


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




















Betreff Re: Sub reagiert trotz Exit Sub
Von "Peter Götz"
Datum 24.10.2009 11:32:22


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)


















Betreff Re: Sub reagiert trotz Exit Sub
Von =?Utf-8?B?UmFpbW8gQmVja2Vy?=
Datum 24.10.2009 12:51:01


Hallo Peter,

"Peter Götz" wrote:

> 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?

Tippfehler, sorry
>
> > 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.

Danke, das wusste ich nicht, ich bin eher mit den Ereignissen in Access
vertraut,
was da - wann und wie - "gefeuert" wird ist mir eher bekannt.

> > 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.

Das wäre dann die richtige Konsequenz.
Also sitzt der Fehler wieder mal vor dem Bildschirm :-)

> > 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.

Ich würde es nicht einmal Konzept nennen, da ich ja nicht wusste/weiß wann
welches Ereignis ausglöst wird.
Habe mir gedacht passt schon... mit exit sub oder unload me
Der Fehler sitzt halt immer wieder...

Ich werde es testen und Rückmeldung gibts auch.

So! Auf zum Fussball und meine Hannoveraner mal wieder verlieren sehen :-((

Danke und schönes WE
Raimo

















Betreff Re: Sub reagiert trotz Exit Sub
Von =?Utf-8?B?UmFpbW8gQmVja2Vy?=
Datum 26.10.2009 11:35:01


Hallo Peter,

Erst den Port schließen dann die MsgBox,
das wars. Danke vielmals.

Eine schöne Woche wünsch ich

Gruß
Raimo



No comments:

Post a Comment