VisualBasic msgBox aktualisieren, Loop unterbrechen

Liberator

Lt. Junior Grade
Registriert
Juli 2009
Beiträge
312
Hi,

ich arbeite grade an einem (nicht mehr wirklich kleinem) Skript, dass in einem eingebetteten VBScript Umgebung läuft. Eingebettet ist der Spass in einer Messsoftware (Nova Px), ist ja eigentlich auch egal.

Es läuft (in einem gewissen Teil des scriptes) folgende Schleife:

Code:
Do

CrtlNPMM_in = GetParam (tSignal, cValue, si_Ext2,0)	'Misst Spannung an Ext2 (Wichtig: Auf Input umschalten!)'

If (CrtlNPMM > 5) Then	'Wenn Spannung an Ext2 >5V, dann Litho aktiv'

SetParam tBase,cValue,pi_hvValueBV,0,Vprobe
Perform tGlobal, gGuiUpdate

Else		'Spannung an Ext2 nicht >5V, dann Litho inaktiv'

SetParam tBase,cValue,pi_hvValueBV,0,0
Perform tGlobal, gGuiUpdate

End If

If (irgendwas) Then
Exit Do
End If

wait 10

Loop

Wundert euch nicht über die Befehle, die sind Softwarespezifisch.

Wie auch immer, ich habe damit 2 Probleme die ich nicht gelöst bekomme.

1. Abhäning von "CrtlNPMM" springt er ja in den einen oder anderen Teil der If-Verzweigung. Ich würde gerne eine Messagebox (o.ä.) haben, die sich selbst aktualisiert und anzeigt was grad passiert. Die Anzeigt dafür zu basteln ist ja kein Akt, aber erstens aktualisiere sich Messageboxen ja nicht und zum anderen warten sie auf eine Eingabe was an der Stelle totaler Murks ist.

2. Wie ihr schon seht hakt es beim "Exit Do". Da bräuchte es irgend einen Interrupt. Am Besten natürlich kombiniert mit der Messagebox aus 1.

Leider scheint es so, als ob ich nicht auf WshShell o.ä zugreifen kann. Zumindest bringt er Fehler wenn ich es versuche und ich wüsste jetzt nicht wie ich das als einbinden könnte.

Zu meiner Verteidigung muss ich sagen, dass ich eigentlich in C++ "zuhause" bin und VBS für mich ziemliches Neuland ist.

Hat jemand ne Idee und kann mir helfen? Wäre supi :)
 
Niemand ne idee?

Wenigstens ne Bedingung, die ich für das "Exid Do" auswerten kann wäre schonmal suuuuper.
 
Für 1. brauchst du ein richtiges Fenster, eine Messagebox kann das per Definition nicht.
Die Probleme, die sich daraus ergeben sind eng miteinander verzahnt. Du musst hier entweder gut tricksen oder aber nebenläufig (Thread) programmieren.
Für das 2. brauchst du ein Signal, Event oder Variable, die bei einem Klick auf den Button geändert wird, also im zweiten Thread, sodass die Schleife darauf reagiert.
Dieses gGUIUpdate hat doch sicherlich die Möglichkeit, auch deine Buttons abzufragen und dann eine globale Variable zu setzten.
 
Abgesehen davon ist das in einer Do-Loop-Schleife gruselig, mach es lieber in einer While-Schleife oder einer Do-While-Schleife... das spart dir das manuelle Abfragen ob du abbrechen sollst...

Ansonsten verhält es sich so, wie Hancock schon meinte:
Du brauchst einen eigenen Thread mit der Mesurement-Loop, weil sonst die UI "einfriert" wenn du in der Schleife bist.
Such mal nach Backgroundworker, ist dafür eigentlich perfekt, weil du hast definierte Start und Endpunkte, sowie Abbruchmöglichkeiten...

Fürs Fenster musst du wirklich ein eigenes Bauen, wenn WPF und MVVM keine Begriffe für dich sind, dann klick dich durch Forms, wird wohl genügen...
 
Zurück
Oben