Hallo in die Runde.
Ich habe mich (mal wieder) dazu durchgerungen von REALStudio 2010 auf Xojo umzusteigen. Dabei ist mir aufgefallen, dass ich in eine Falle getappt bin die bisher nicht auffiel. Man darf in Threads keine GUI-Ausgaben machen. Auch nicht in Methoden, die vom Thread aufgerufen werden. 
Jetzt habe ich aber eine Routie, die bei Fehlern angesprungen wird, ein entsprechendes Protokoll schreibt und einen Hinweis ausgibt. Letzteres ist leider ein Problem.
Ich suche also eine Möglichkeit, einen Timer global in Aplication anzulegen, den ich bei Bedarf auf Mode=1 setze. Da hier kein GUI-Fenster vorhanden ist, kann ich aber keinen Timer hineinziehen. Wie macht Ihr das?
Gruß, Stefan Mettenbrink.
Du kannst einen Timer jederzeit als normale Property erstellen. Den mangels graphischer Umsetzung nicht erreichbaren Action-Event sprichst du an, indem du ihn via AddHandler myTimer.Action, AddressOf TimerActionMethode
umlenkst.
P.S.: Die “Falle” ist im übrigen den OS-APIs geschuldet. Cocoa erlaubt keinen Zugriff auf UI-Elemente aus Threads mehr, wie man unter Carbon noch durfte. Ganz plausibel, wenn man sich überlegt, was entstünde, wenn mehrere Threads gleichzeitig ein Control verändern wollen.
P.P.S: Schau dir auch mal Xojo.Core.Timer an. Da gibt es den Befehl CallLater, mit dem du eine Methode verzögert (das Delay kann auch 0 sein) vom Main-Thread aus anspringst. Das kann das Anlegen eines externen Timers ersparen, wenn es nur darum geht, wieder sicher die GUI ändern zu können, also kein mehrfaches Ausführen nötig ist.
[quote]
Edited 2 minutes ago by Ulrich Bogun
Du kannst einen Timer jederzeit als normale Property erstellen. Den mangels graphischer Umsetzung nicht erreichbaren Action-Event sprichst du an, indem du ihn via AddHandler myTimer.Action, AddressOf TimerActionMethode umlenkst.[/quote]
Das verstehe ich nicht.
Bisher habe ich den Timer immer als GUI-Element in das Fenster gezogen. Das geht hier ja nicht. Per Kontextmenü kann ich zwar einen Event-Handler hinzufügen, dort wird aber kein Timer angeboten.
Hast Du mal einen Anleitung für Anfänger?
Gruß, Stefan Mettenbrink.
https://dl.dropboxusercontent.com/u/21200221/Xojo/Timer%20als%20Property.zip
Dass der Timer als GUI-Element vorliegt, ist eine Convenience-Geschichte von Xojo. Ein Timer ist natürlich nur Code und hat keine graphische Gestalt. Durch seine Darstellung als Control wird es einfacher, ihn so zu benutzen, wie du es bislang getan hast.
Aber er ist ebenso einfach als Property anlegbar. Da du dann nicht per Inspector an seinen Action-Event kommst, musst du diesen von anderer Stelle (z.B. dem OpenEvent des Fensters oder der App) aus verbiegen. Du findest beide beschriebenen Möglichkeiten im App-Open-Event.
Ich hab ein paar Worte darüber hier verloren. Gib gerne Bescheid, falls noch was zum Verständnis fehlt.
Ich denke, ich habe es verstanden. Derzeit baue ich es gerade um und werde spter testen.
Danke fr die Untersttzung!
Gru, Stefan Mettenbrink.
Wofür ist ind TimerActionMethod die Zeile:
#pragma unused t
gedacht?
Gruß, Stefan Mettenbrink.
Habe ich selbst herausgefunden.