c# - WPF DispatcherFrame 魔术 - 这是如何以及为什么起作用的?

标签 c# wpf

我试图在 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/

相关文章:

c# - 直接访问基类变量/对象 c#

c# - WPF Datagrid 绑定(bind)列表问题

wpf - 如何防止 WPF 使用 Windows 字体大小选项进行缩放?

c# - 遍历 WPF 的 Xceed DataGrid 中的所有单元格?

wpf - VisualStateManager-集中控制时显示鼠标悬停状态

c# - pythonnet 在 .net 示例中嵌入 Python 加载模块失败

c# - NLOG WhenRepeatedFilter 和多个目标的问题

c# - 在 C# 中使用 C++ CLI 模板类

wpf - 对于 ICommand 和 DelegateCommand 它在哪个线程上运行?

wpf - 将输入事件从 HwndHost 传递到底层 WPF 控件?