Montag, 21. Februar 2011

EBC - die erste

Nachdem ich mich jetzt seit einiger Zeit mit den "Event based Components" in der Theorie auseinander gesetzt habe will ich nun auch mal zur Tat schreiten. Die Aufgabe besteht darin, dass eine Reihe von Bildern geladen, bearbeitet und wieder gespeichert, sowie Ergebnisse der Datenextraktion gespeichert werden sollen. Im besten Falle sollte das ganze asynchron laufen.
Das Ganze wird vom Bediener durch Knopfdruck (O) gestartet. Ein erster Versuch den Fluss darzustellen ist hier zu sehen:


Die Umsetzung der einzelnen Komponenten war danach nicht mehr das größte Problem. Natürlich musste ich immer mal wieder kurz nachdenken, was denn jetzt von wem aufgerufen wird und wie die einzelnen Übergabeparameter auszusehen haben. Was mich allerdings am ehesten verwirrt, ist die Tatsache, dass jeweils nur ein Parameter übergeben werden kann und darf. Vor allem bei den "Show-"-Methoden hat das zu Schwierigkeiten geführt. Allerdings muss ich sagen, dass ich die verschiedenen Parameter auch in einem Objekt hätte zusammenfassen können. Im Eifer habe ich daran erst mal keinen Gedanken verschwendet.

Nach der Fertigstellung der einzelnen Komponenten war dann noch die Verdrahtung dran. Ich denke, dass mit etwas Übung diese Aufgabe leichter von der Hand geht und ich mir nicht bei jedem Pin überlegen muss wo kommt er her und wo soll er hin. Alles in allem also synchron kein Problem. Ich wollte es dann aber auch gleich richtig wissen und habe mit dem AsynchHandler von Ralf Westphal herumgespielt. Hier wird die Sache erheblich komplizierter und unübersichtlicher. Vor allem, da ich alles auf einmal umgestellt habe. Das heißt im Detail:
- das Laden
- die Berechnung
- das Hinzufügen der Daten läuft asynchron.

Das Zeigen der Bilder und der Ergebnisse auf der GUI wird wieder synchronisiert. Einzig der Punkt der Datenspeicherung ist noch offen.

Da der CalcRequest asynchron ist kommt er sofort zurück und SaveRequest wird dementsprechend ausgeführt, bevor alle Bilder bearbeitet wurden. Ich möchte aber gerne ein Event schicken wenn alle Threads fertig mit der Bearbeitung sind und erst dann die Ergebnisse speichern. Oder muss ich hierfür klassische Events  benutzen? Ich werde eine Lösung dafür finden.

Keine Kommentare:

Kommentar veröffentlichen