Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19-04-2009, 18:31   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Redraw der GUI erzwingen.

Hallo Leute,

ich habe eine menge Prozesse die mein Programm abarbeiten muss. Zwischendrin würde ich gerne auf labeln den aktuellen Stand der Software ausgeben. Also bei welchem Prozess sie sich grade befindet.

Allerdings werden die Änderungen an der GUI erst zum schluss (nach der kompletten abarbeitung sichtbar)...

Gibt es eine Möglichkeit das neuzeichnen der GUI zu erzwingen sodass auch während den Proessen live in der GUI gezeigt werden kann was sie grade macht?

Danke

viele Grüße

Sythus
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 18:39   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Da niemand hier das Update der Glaskugel App 1.0 hat können wir ohne Code nur raten, was dein Model ist, wie es mit der View assoziert wird etc.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-04-2009, 18:50   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Sorry dachte nicht das dass hier eine Rolle spielt.

mxml
Code:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="800" creationComplete="creationCompleteHandler(event)" xmlns:hcma="hc.ma.*">
	<mx:Script>
		<![CDATA[
			import hc.ma.WiedervorlageManager;
			import mx.events.FlexEvent;
			private function creationCompleteHandler(event:FlexEvent) : void
			{
				new WiedervorlageManager(this);
			}
		]]>
	</mx:Script>
	<mx:Label text="Name:" top="10" left="10"/>
	<mx:TextInput id="mitarbeiter" left="10" top="25"/>
	<mx:Button label="Wiedervorlage starten" left="180" top="25" id="startButton"/>
	<mx:TextArea left="10" right="10" bottom="10" top="80" id="log" editable="false" fontFamily="Arial" fontSize="12"/>
	<mx:Label width="186" right="193" top="27" id="output"/>
</mx:WindowedApplication>
Code:
package hc.ma
{
	import flash.events.MouseEvent;
	
	public class WiedervorlageManager
	{
		
		
		//Konstante Positionswerte der Spalten ST
		public static const _stNrST:Number = 4;

		private var wvgui:WiedervorlageTool;
		private var log:Log;
		
		public function WiedervorlageManager(wvgui:WiedervorlageTool)
		{
			this.wvgui = wvgui;			
			this.wvgui.startButton.addEventListener(MouseEvent.CLICK, starteWiedervorlage);
			
			//globale Variablen setzen
			var globalVars:GlobalVarContainer = new GlobalVarContainer();
			globalVars.setLog(this.wvgui.log);
			globalVars.setOutput(this.wvgui.output);
			
			this.log = new Log();
	
		}
		
		private function starteWiedervorlage(event:MouseEvent) : void
		{	
			this.log.log('Starte Wiedervorlage...');
			try
			{	
				this.log.output.text = "Stammdaten werden aktualisiert..";
var success:Boolean = this.stammdatenAktualisierung();
				if(success == false) throw new Error('Stammdatenaktualisierung ist fehlgeschalgen.');
				if(success == true) this.log.log('Stammdatenaktualisierung erfolgreich!');
				
this.log.output.text = "Lese Notwendige Daten...";
				success = this.leseNotwendigeDatenEin();
				if(success == false) throw new Error('Es gab unerwartete Probleme beim einlesen der einzelnen Daten');
				if(success == true) this.log.log('Einlesen der notwenidgen Daten erfolgreich.');
				
			}
			catch(e:Error)
			{
				this.log.log(e.message, true);
				this.log.log('Wiedervorlage fehlgeschlagen.', true);
				return;
			}
			
		}
Das als kleiner Ausschnitt, ich hoffe das reicht. Bei Klick auf den Button ratterts los. Die da aufgeführten Prozesse (stammdatenaktualisierung und lesenotwendigedatenein) brauchen eine ganze weile. (ca 30 Sekunden).


Die GUI wird allerdings erst aktualisiert wenn alles fertig ist.
d.h. this.log.log(e.message, true) welche die Texkomponente befüllt als auch
this.log.output.text welche das Label befüllt werden erst ganz zum schluss aktualisiert... bzw. ausgeführt.

Hoffe das is soweit alles ersichtlich.

Danke schonmal
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 19:22   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Ist da alles dabei was du brauchst um meine Frage zu beantworten?
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 19:41   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Sorry, da sind ja auch keine Update Mechanismen eingebaut. Ich würde dir raten mal die Flex Basics zu studieren. Dann kommst du auch um die global Variablan rum und das Leben wird einfacher.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-04-2009, 19:48   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
hmm, also liegts an den globalen Variablen? Könnte die Komponenten wie das Label und die TextKomponente ja auch jeder Klasse mitübergeben.

Gehts denn noch anders bzw. einfacher?

Und was meinst du mit Updatemechanismen? Wie könnten die aussehen?

Könnte auch zwischen jedem Prozess nen Timer starten und wenn der abgelaufen ist den nächsten Prozess anstoßen.
Aber das nur dafür um eine "liveausgabe" zu haben ist etwas zuviel des guten oder? Meintest du sowas mit Updatemechanismus?

Wäre nett wenn du mich auf eine noch genauere Fährte führst.

Danke

Sythus
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 19:51   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Du hast dir DataBinding noch nicht angeschaut oder? Das ist Thema Nr. 1. Und die generelle Struktur... wird dadurch auch besser.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-04-2009, 19:52   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Grob schon aber danke dann mach ich das jetzt sofort...
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 20:08   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Unter Databinding verstehe ich bisher:

Code:
	<mx:Script>
		<![CDATA[
			import hc.ma.WiedervorlageManager;
			import mx.events.FlexEvent;
			[Bindable]public var wv:WiedervorlageManager;
			private function creationCompleteHandler(event:FlexEvent) : void
			{
				wv = new WiedervorlageManager(this);
			}
		]]>
	</mx:Script>


<mx:Label width="186" right="193" top="27" id="output" text="{wv.str}"/>
das Label bekommt nun immer den Text der Stringvariable. Okay das ist tatsächlich ein besserer möglichkeit als die ganze Komponente mit mir rumzuschleppen.

Aber in Bezug auf die Liveübertragung an die GUI während Prozesse laufen hilft mir das nicht oder? Auch dabei wird die GUI erst am Ende der Prozesse aktualisiert.
Sythus ist offline   Mit Zitat antworten
Alt 19-04-2009, 20:13   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Lies dich mal in die Thematik ein. Dann wirst du verstehen, warum es hilft und wie es funktioniert.
Omega Psi ist offline   Mit Zitat antworten
Alt 19-04-2009, 20:17   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
okay *g*

Nu bin ich wieder total verwirrt

Geändert von Sythus (19-04-2009 um 20:25 Uhr)
Sythus ist offline   Mit Zitat antworten
Alt 20-04-2009, 06:00   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Wieso das?
Omega Psi ist offline   Mit Zitat antworten
Alt 20-04-2009, 07:03   #13 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Moin ^^

Naja, hab mir nun gestern noch bis halb 2 das komplette Kapitel Data Binding aus den LiveDocs reingezogen: http://livedocs.adobe.com/flex/3/htm...binding_1.html

Nur um eventuell zu verstehen worauf du hinaus willst und wie mir das ganze weiterhilft. Hab mir angeschaut wann das ganze gefeuert werden sollte und
ettliche Beispiele ausprobiert, sogar eigene Events abgefeuert in der Hoffnung das dass Data Binding während der Prozesse greift und die GUI aktualisiert.

Alles ohne Erfolg.

Möchte ja nur die GUI zwischen 2 Prozessen ansprechen und ein Label oder eine Texkomponente ändern.
Code:
public function meineMethode{
this.führeDasAus();
meineKomponente.text = "irgendeinText" //hier hab ich ettliche Sachen per Databinding probiert. In der Hoffnung das er vor der nächsten Methode 
die GuUI aktualisiert, da du sagtest das dass damit geht^^ oder bin ich immernoch auf dem völlig falschen weg?
this.führeDasNächsteAus();
}
Zu sagen is auch, das dass komplette Fenster während der Dauer wo die Methoden abrattern fest sitzt... Als wäre es abgestürzt. Man kann es weder
rumschieben noch Minimieren oder schließen. Klar das sich da nix an der GUI verändern kann... komisch alles^^

Grüße

Geändert von Sythus (20-04-2009 um 07:05 Uhr)
Sythus ist offline   Mit Zitat antworten
Alt 20-04-2009, 07:40   #14 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das Schreiben in die text Property hat nichts mit DataBinding zu tun. Da ich die Algorithmen in deiner Anwendung nicht, kann ich nichts zu deinen Problemen konkret sagen.
Omega Psi ist offline   Mit Zitat antworten
Alt 20-04-2009, 07:50   #15 (permalink)
Neuer User
 
Registriert seit: Dec 2008
Beiträge: 114
Ja das dass schreiben in die Textproperty nichts mit Databinding zu tun hat, weiß ich.

Das sollte nur nochmal verdeutlichen was ich gerne möchte. Aber an dieser stelle habe ich Databinding probiert. D.h. zum Beispiel eine String variable als Source genommen und die text property als Destination. Und dann die String variable an dem Punkt geändert. (Und noch vieles mehr, fast alle Beispiele aus der LiveDoc)

Ich glaub da spielt mir die asynchronität mit rein oder?
Denn nehmen wir an ich könnte erst die eine Methode ausführen bis sie beendet ist, dann den Textproperty ändern und dann die nächste starten hätte ich das Problem nicht, oder?

die Algorithmen in meiner Anwendung swohl Methode1 als auch Methode2 arbeiten in einer for mehrere Tausend Datensätze ab. Führen Dateioperationen aus und das wars auch schon im großen uns ganzen.


Nochmal zur veranschaulichung:
public function MyFunction(){
methode1(); // Dauert ca. 10 Sekunden
komponente.text = "irgendeinText" //Nach 10 Sekunden soll die GUI den
Text anzeigen, denn dann is Methode 1 ja fertig
methode2(); // Dauert ca. 20 Sekunden
}

Die Aktualisierung der GUI passiert aber erst nach 30 Sekunden. Bis dahin is die Anwendung steif so als wäre sie Abgestürzt.
Sythus ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele