PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WPF - AsynCallbacks / UI-Thread Ablaufproblem


Mr. Lolman
2015-07-14, 13:32:43
Hi, ich hab folgendes Problem


In einem WPF Programm soll nach einer bestimmten Zeit eine Animation ausgeführt werden. Aktuell ists folgendermaßen implementiert.



ShowAnimation();
Action Deleg = new Action(() =>
{

Stopwatch sw = new Stopwatch();
sw.Restart();
while (sw.ElapsedMilliseconds <= Infoduration) System.Threading.Thread.Sleep(100);

});

Deleg.BeginInvoke(new AsyncCallback(HideAnimation),Deleg);



Das Problem bei der Implementation ist offenbar, dass HideAnimation nicht im UI-Thread läuft, sondern in einem eigenen. Außerdem sollen die Animationen in ShowAnimation diejenigen von HideAnimation übersteuern können.

Optimaler Ablauf:
1. Kunde klickt irgendwo
2. ShowAnimation kommt
3. Wartezeit
4. Hideanimation kommt


Problem: Der Kunde soll auch während den Schritten 2. 3. 4. klicken können und den Ablauf somit wieder von vorne starten.
Wenn nun die Hideanimation (deren Methode zwar in einem eigenen Thread läuft, aber mit Dispatcher.Invoke sich in den UI-Thread klinkt), gerade läuft entsteht ein Pallawatsch in Form dessen, dass die Hideanimation (=ausblenden) läuft und sich mit der Showanimation (=einfliegen) überlagert.

Nun müsst ich theoretisch einfach alle laufenden Animationen beim Aufruf von Showanimation stoppen (Label.BeginAnimation(UIElement.OpacityProperty, null); )

praktisch klappt das aber aus irgendeinem Grund nicht.

Mr. Lolman
2015-07-14, 13:53:12
Lösung:
Mittels einem Boolean in der HideAnimation checken, ob die Elemente durch die Showanimation gelockt sind. Hatte ich zwar eh, aber ich hab noch einen Completed.Eventhandler in dem ich den Check vergessen hatte.


(Natürlich fällt mir das erst auf, nachdem ich den Thread erstellt hab ;D)

5tyle
2015-07-14, 21:28:18
Kenne mich mit wpf nicht so aus, aber kann man das bei wpf nicht auch mit irgendwelchen Animationsfunktionen machen? Muss man da einen extra Thread machen dafür? Ich dachte eigentlich dass das wpf irgendwie von sich aus kann.

https://msdn.microsoft.com/de-de/library/ms752312%28v=vs.110%29.aspx