Laden...

Fenster "Neuzeichnen" nach Änderung in WPF

Erstellt von Jocker vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.169 Views
J
Jocker Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Fenster "Neuzeichnen" nach Änderung in WPF

Ich blende ein Bild ein mit System.Windows.Visibility.Visible wenn das Window Loaded.

Nun möchte ich das jede 2. Sekunde das Bild blinkt, die SChleife läuft durch, der delegat ruft die funktion auf die Visible auf Hide oder Visible setzt aber es passiert nichts, nur am Ende der
for - Schleife Taucht das Bild auf.

Wie kann ich nach jedem Durchgang der Schleife das Image das übrigens im Grid eingebettet ist neuzeichnen oder neu darstellen...?

Ich hab das schon mal geschaft aber immer wieder bring ich bei diesem Trick 17 was durcheinander, hab schon das Gefühl ich könnte nicht mal ne Variable deklarieren.

Helft mir bitte.

J
Jocker Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Ich blende ein Bild ein mit System.Windows.Visibility.Visible wenn das Window Loaded.

Helft mir bitte.

Programmiert Niemand mehr mit WPF ?

Hinweis von Abt vor 10 Jahren

Ich hoffe Du erwartest nicht im Ernst zwischen Sonntags 22 Uhr und Montags 8 Uhr eine Antwort. Man kann auch mal warten - vor allem an Wochenenden.

P
40 Beiträge seit 2011
vor 10 Jahren

Ich nehme an die Schleife läuft direkt im Code des Fensters und nicht in einem BackgroundWorker bzw. eigenen Thread? Und verwendest du einen Dispatcher?

J
Jocker Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Ich nehme an die Schleife läuft direkt im Code des Fensters und nicht in einem BackgroundWorker bzw. eigenen Thread? Und verwendest du einen Dispatcher?

ja die Schleife läuft im Hauptthread.
Ich wollte ja mit delegatate.BeginInvoke(..,..,...) ; die Methoden zum Schalten der Visible Property in einem anderen Thread starten, aber ich kann dann nicht auf die Image - Objekte zugreifen weil die jetzt nicht erreichbar sind , weil die im Hauptthread sich befinden wahrscheinlich.
(Das wäre auch interresant zu wissen , wie kann man Threadübergreifend programmieren? ) .

5.658 Beiträge seit 2006
vor 10 Jahren

Weeks of programming can save you hours of planning

J
Jocker Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren


>

Die Deutsche Rechtschreibung ist C# du darfst damit machen was du willst, wenn du Blödsinn programmierst wird es nur dich interessieren.
Es gilt auch für alle anderen Rechtschreibungen.

U
1.688 Beiträge seit 2007
vor 10 Jahren

Hallo,

Die Deutsche Rechtschreibung ist C# du darfst damit machen was du willst, wenn du Blödsinn programmierst wird es nur dich interessieren.
Es gilt auch für alle anderen Rechtschreibungen.

Es ist ziemlich sinnfrei, sich auf eine Signatur zu beziehen und dabei ein Zitat zu verwenden, das diese nicht enthält. Stattdessen hättest Du mal dem Link folgen sollen.

Mit Deinem Anspruchsdenken (Push nach 9 Stunden zudem noch nachts und sonntags, keine eigenen Bemühungen zur Diskussion gestellt - offensichtlich erwartest Du eine Komplettlösung vorgekaut zu bekommen) und Deinem Umgang mit anderen Board-Mitgliedern sorgst Du nicht gerade dafür, dass jemand Lust hat, Dir hier unentgeltlich in seiner Freizeit zu helfen.

Vielleicht konkretisierst Du Deine Frage erst mal. Und wenn Du "das schon mal geschaft" hast, dann wäre es doch am einfachsten da nachzuschauen, wie Du's gemacht hast.

S
248 Beiträge seit 2008
vor 10 Jahren

ja die Schleife läuft im Hauptthread.

Wenn du Operationen im GUI-Thread machst, dann wird die Oberfläche erst dann aktualisiert, wenn ein Benutzer-Code abgearbeitet wurde. Wenn am Anfang dein Bild sichtbar ist, und am Ende deiner Schleife wieder auf sichtbar geändert wird, so hat sich für die Oberfläche nichts geändert, also siehst du auch keine Änderung.
Du musst die Operation in einen 2. Thread auslagern und mit Hilfe des Dispatchers die Visible-Änderungen in den GUI-Thread leiten.

Grüße

J
Jocker Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

ja die Schleife läuft im Hauptthread.

Du musst die Operation in einen 2. Thread auslagern und mit Hilfe des Dispatchers die Visible-Änderungen in den GUI-Thread leiten.

Grüße

Danke Spook, mit Hinweis auf Dispatcher hat alles funktioniert. Ging ganz schnell.

An die anderen danke für die ausführliche Info, für den Hinweis auf die Info. Sehr interessant.
Vor allem die weiteren Links dort.

Hab's mit BackgroundWorker und Element.Dispatcher gelöst. Dem Dispatcher gebe ich einen Bool als Parameter mit, um die Visible ein- bzw. auszuschalten.

5.658 Beiträge seit 2006
vor 10 Jahren

Animationen werden unter WPF üblicherweise mit Storyboards umgesetzt, daher der Link von mir. Da braucht es keine Backgroundworker, Timer oder Dispatcher.

Weeks of programming can save you hours of planning