Methode der Klasse: ModlEnv
TeamWiSE.TAA.YieldEnum Yield ( System.UInt32 dwTimeOut ) TeamWiSE.TAA.YieldEnum Yield ( )
Yield
entspricht mit einigen Einschränkungen einem UnRegister
mit anschließendem neuem Register
:
Wie beim UnRegister
, geht die Kontrolle an das aufrufende Modul zurück; jedoch wird das Modul nicht beendet, sondern wartet darauf, wieder benutzt zu werden. Die lokalen Datenobjekte, die beim UnRegister
zerstört werden, bewahrt die TAA-Infrastruktur beim Yield
für weitere Benutzung auf.
Sobald die TAA-Infrastruktur feststellt, dass der Baustein wieder benötigt wird, so führt sie automatisch einen neuen Register
durch und startet dasselbe Modul neu. (Zum Vergleich: Beim „echten“ UnRegister/Register
würde eine neue Instanz des Moduls gestartet, beim Yield
wird dieselbe Instanz lediglich durchgestartet). Dadurch bleiben auch die in .Net
angelegten Variablen erhalten.
Über das Argument dwTimeout
können Sie angeben, nach wieviel Millisekunden (z.B. 30 Sekunden = 30.000 Millisekunden) die Infrastruktur auf jeden Fall die Kontrolle an den Baustein zurückgeben soll, auch wenn die Verarbeitung, auf die er wartet, noch nicht beendet ist. Wenn Sie nichts angeben, wird als Default 300 Millisekunden angenommen.
Mögliche Rückkehrwerte von Yield
, auf die der Baustein reagieren muss, sind in der Klasse YieldEnum
festgelegt:
Error
Die TAA-Infrastruktur konnte den Yield
nicht ausführen. Dieser Fehler tritt z.B. auf, wenn der Baustein noch nicht angemeldet ist (Register
).Resume
Der Baustein wird, wie erwartet, nochmals benötigt. Der Resume
kann so verstanden werden, dass ein neuer Register
erfolgte, nur dass in diesem Fall die .Net-Variablen und lokale TAA-Datenobjekte erhalten blieben. Wie nach einem „normalen“ Register
, sollte der Baustein nun also zunächst feststellen, welche Operation ausgelöst wurde und welche Parameterobjekte übergeben wurden.CleanUp
Die Infrastruktur hat festgestellt, dass keine Rückkehr in den aktuellen Baustein mehr erfolgt, und hat bereits automatisch ein UnRegister
des aktuellen Bausteins durchgeführt. Der Baustein hat noch die Möglichkeit, aufzuräumen; bei der TAA-Infrastruktur ist er zu dem Zeitpunkt schon nicht mehr bekannt (genauso wie nach UnRegister
).Timeout
Die Infrastruktur hat die Kontrolle an den Baustein zurückgegeben, da die mit dwTimeout
angegebene Wartezeit abgelaufen ist.
Wenn das Modul nach der Wartezeit zum Zuge kommt, hat es die Möglichkeit, z.B. eine Warteanzeige (Uhr o.ä.) zu aktualisieren, und kann dafür sorgen, dass für Fenster, die noch auf dem Bildschirm sichtbar sind, ein Refresh
erfolgt. Es ist auch möglich, das Modul zu beenden, um Ressourcen freizugeben (kein UnRegister
mehr nötig).
Refresh
der Fenster während Timeout: Wenn Fenster während des Yield
sichtbar bleiben, sollte regelmäßig ein Refresh
darauf stattfinden. Die Abstände zwischen den Refresh
s sollten nicht zu lang sein (keine zu lange Wartezeit festlegen). Außerdem sollten Sie dafür sorgen, dass die Knöpfe und Felder auf solchen Fenstern nicht benutzt werden können, da bei der Abarbeitung der sog. Messagequeue
versucht werden würde, auf diese Benutzung zu reagieren; dies würde mit Sicherheit zu einem Laufzeitfehler führen.
Alternativ können die Fenster während der Wartezeit unsichtbar gemacht werden. Nicht vergessen, nach dem Resume
die Fenster wieder sichtbar zu machen und die Controls wieder zu aktivieren!
Resume
kann die TAA-Infrastruktur die Fenster des Moduls nicht automatisch in den Vordergrund bringen, wenn sie nicht „enabled“ oder nicht sichtbar sind.Yield
braucht einen TAA-Aufrufer: Ein Yield
ist nur möglich, wenn das Modul einen Aufrufer hat. Wenn ein Modul z.B. direkt von .Net aus gestartet wurde, so hat es keinen TAA-Aufrufer und kann keinen Yield
machen. Wenn ein Yield
nicht möglich ist, ist der Rückkehrwert CleanUp
, d.h. entspricht einem UnRegister
.Yield
macht, eine Geschäftsvorfall-Steuerung oder -Teilsteuerung ist, so wird der Yield
von der TAA-Infrastruktur abgelehnt. Grund: Innerhalb der Gevo-Steuerung kann eine Unterbrechung stattfinden, und nach einer Unterbrechung kann der aktuelle Zustand des Moduls (lokale Variablen usw.) nicht mehr hergestellt werden.Resume
für das neue Ereignis ein Parameterobjekt übergeben wurde, das den gleichen Namen hat wie ein lokales Objekt, das bei der vorhergehenden Operation angelegt wurde, so wird das lokale Objekt dadurch zerstört. Es gibt dann nur noch das Parameterobjekt mit diesem Namen.