Storyboard myStory = (Storyboard)this.Resources["flashLabel"];
myStory.Begin();
label.Content = "over";
就是希望上面的最后一行代码在动画执行完后再执行,有什么办法吗?各位大神帮帮忙!
10 个解决方案
#1
#2
我的目的不是在Complated事件中执行代码,比如演示一个冒泡排序的过程,在循环中完成了一次比较后,播放动画,演示这次比较和数据的交换,动画播放时代码暂停执行,动画播放结束后循环继续执行,再次比较则再次重复这一过程,直到排序完成
#3
用sleep 阻塞主线程,同时播放动画,不过sleep的时间与动画时间要计算一致。
#4
用sleep 阻塞主线程,同时播放动画,不过sleep的时间与动画时间要计算一致。
尝试了这个方法,但是动画同时也被阻塞了
#5
Complated事件,
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
我的目的不是在Complated事件中执行代码,比如演示一个冒泡排序的过程,在循环中完成了一次比较后,播放动画,演示这次比较和数据的交换,动画播放时代码暂停执行,动画播放结束后循环继续执行,再次比较则再次重复这一过程,直到排序完成
这个需求如下实现:
1. 播放动画的逻辑
2.排序算法逻辑
3. 第2步的方法应该放到一个线程中去做, while死循环, 每次执行后, 异步播放动画, 调用ManualEvent的Wait方法, 这样在执行动画时, 线程是阻塞的.
4.在播放动画的完成里设置信号量为true, 然后线程会继续下一次执行.
5.每次重新循环时, 信号量置为false.
#6
这个需求如下实现:
1. 播放动画的逻辑
2.排序算法逻辑
3. 第2步的方法应该放到一个线程中去做, while死循环, 每次执行后, 异步播放动画, 调用ManualEvent的Wait方法, 这样在执行动画时, 线程是阻塞的.
4.在播放动画的完成里设置信号量为true, 然后线程会继续下一次执行.
5.每次重新循环时, 信号量置为false.
谢谢,尝试了这一思路,确实可行,只是应该如何将参数传递到调用动画的线程中呢?
#7
通过delegate 实现begin invoke传参
#9
综合大家的建议,解决了问题,感谢大家!
只是觉得,如果WPF能够直接提供动画和代码的交互能力就更好了!
结帖!
只是觉得,如果WPF能够直接提供动画和代码的交互能力就更好了!
结帖!
#10
动画是在主线程执行的,当走到动画的最后一句(startAnimation时,),程序将会分成两步,一边执行动画的开始,一边执行mStory,所以,在startAnimation之后开启一个子线程睡一觉,代码如下:
startAnimation();
new Thread() {
public void run() {
SystemClock.sleep(5000);
// 子线程中调用主线程来刷新ui
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mStory();
}
});
};
}.start();
startAnimation();
new Thread() {
public void run() {
SystemClock.sleep(5000);
// 子线程中调用主线程来刷新ui
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mStory();
}
});
};
}.start();
#1
Complated事件,
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
#2
Complated事件,
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
我的目的不是在Complated事件中执行代码,比如演示一个冒泡排序的过程,在循环中完成了一次比较后,播放动画,演示这次比较和数据的交换,动画播放时代码暂停执行,动画播放结束后循环继续执行,再次比较则再次重复这一过程,直到排序完成
#3
Complated事件,
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
我的目的不是在Complated事件中执行代码,比如演示一个冒泡排序的过程,在循环中完成了一次比较后,播放动画,演示这次比较和数据的交换,动画播放时代码暂停执行,动画播放结束后循环继续执行,再次比较则再次重复这一过程,直到排序完成
用sleep 阻塞主线程,同时播放动画,不过sleep的时间与动画时间要计算一致。
#4
用sleep 阻塞主线程,同时播放动画,不过sleep的时间与动画时间要计算一致。
尝试了这个方法,但是动画同时也被阻塞了
#5
Complated事件,
https://msdn.microsoft.com/zh-cn/library/system.windows.media.animation.timeline.completed.aspx
我的目的不是在Complated事件中执行代码,比如演示一个冒泡排序的过程,在循环中完成了一次比较后,播放动画,演示这次比较和数据的交换,动画播放时代码暂停执行,动画播放结束后循环继续执行,再次比较则再次重复这一过程,直到排序完成
这个需求如下实现:
1. 播放动画的逻辑
2.排序算法逻辑
3. 第2步的方法应该放到一个线程中去做, while死循环, 每次执行后, 异步播放动画, 调用ManualEvent的Wait方法, 这样在执行动画时, 线程是阻塞的.
4.在播放动画的完成里设置信号量为true, 然后线程会继续下一次执行.
5.每次重新循环时, 信号量置为false.
#6
这个需求如下实现:
1. 播放动画的逻辑
2.排序算法逻辑
3. 第2步的方法应该放到一个线程中去做, while死循环, 每次执行后, 异步播放动画, 调用ManualEvent的Wait方法, 这样在执行动画时, 线程是阻塞的.
4.在播放动画的完成里设置信号量为true, 然后线程会继续下一次执行.
5.每次重新循环时, 信号量置为false.
谢谢,尝试了这一思路,确实可行,只是应该如何将参数传递到调用动画的线程中呢?
#7
通过delegate 实现begin invoke传参
#8
#9
综合大家的建议,解决了问题,感谢大家!
只是觉得,如果WPF能够直接提供动画和代码的交互能力就更好了!
结帖!
只是觉得,如果WPF能够直接提供动画和代码的交互能力就更好了!
结帖!
#10
动画是在主线程执行的,当走到动画的最后一句(startAnimation时,),程序将会分成两步,一边执行动画的开始,一边执行mStory,所以,在startAnimation之后开启一个子线程睡一觉,代码如下:
startAnimation();
new Thread() {
public void run() {
SystemClock.sleep(5000);
// 子线程中调用主线程来刷新ui
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mStory();
}
});
};
}.start();
startAnimation();
new Thread() {
public void run() {
SystemClock.sleep(5000);
// 子线程中调用主线程来刷新ui
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mStory();
}
});
};
}.start();