我试图在 WPF
中制作一些动画,并在动画结束时运行一些其他操作。
另外,想避免动画完成回调机制,所以,我想出了一个解决方案,如下面的代码所示:
// Start one second of animation
...
// Pause for one second
Wait(this.Dispatcher, 1000);
// Continue and do some other stuff
...
现在,有趣的部分是 Wait
方法,它神奇地使我的代码中的阻塞暂停但动画和 UI 保持正常,响应:
public static void Wait(Dispatcher Dispatcher, int Milliseconds)
{
var Frame = new DispatcherFrame();
ThreadPool.QueueUserWorkItem(State =>
{
Thread.Sleep(Milliseconds);
Frame.Continue = false;
});
Dispatcher.PushFrame(Frame);
}
我已经阅读了有关 DispatcherFrame
的文档和几篇文章,但我仍然无法弄清楚引擎盖下到底发生了什么,我需要一些关于如何使用 构建的澄清PushFrame
确实有效。
最佳答案
来自 MSDN :
PushFrame
Enters an execute loop.
只要其 Continue
属性为 true
,该循环(即 DispatcherFrame
)就会执行。
只要 Continue
属性变为 false
,就会退出循环/帧,并且 Dispatcher 会返回到它在您调用 PushFrame 之前执行的循环/帧。
关于c# - WPF DispatcherFrame 魔术 - 这是如何以及为什么起作用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002966/