首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Niuery的技术日记

    Freezable ---探索Freezable承载数据的原理

    Freezable 类为何能够中转数据,DependencyObject 不行? 那么本篇文章就来探索一下 Freezable实现了上述功能的原理是什么? 首先,准备自定义 Freezable 类: public class CustomFreezable : Freezable { public static readonly DependencyProperty 原因就是 FindResource 方法中,如果要查询的资源是Freezable类型的,则会将当前资源的 DataContent的 Visual 绑定到 InheritanceContext,所以Freezable Freezable 类为何能够中转数据,DependencyObject 不行? 类型的才可以,我猜测这可能跟这个类的定义有关系,Freezable 类为 WPF 中的对象提供了不可变性和性能优化的功能,同时也为动画、资源共享和跨线程安全性等方面提供了便利。

    67910编辑于 2024-01-08
  • 来自专栏czwy的博客

    WPF性能优化:Freezable 对象

    Freezable类使画笔能够找到生成的相应低级别对象并在更改时更新它们。 注意事项 并非每个Freezable对象都可以冻结。 如果Freezable包含其他已冻结的 Freezable对象,它们也会被克隆并变为可修改。 无论使用哪种克隆方法,动画都不会复制到新的 Freezable。 由于无法对冻结的Freezable进行动画处理,因此使用Storyboard对其进行动画处理时,动画系统会自动创建冻结的Freezable对象的可修改克隆。 SetFreeze(Freezable freezable, bool value) { freezable.SetValue(FreezeProperty, value); freezable = d as Freezable; if (freezable.CanFreeze) freezable.Freeze();

    93930编辑于 2023-10-22
  • 来自专栏Niuery的技术日记

    WPF --- 如何以Binding方式隐藏DataGrid列

    这时候就需要借助一个抽象类 System.Windows.Freezable。 摘取部分官方解释如下: 从文档中可以看出 Freezable 非常符合我们想要的,第一它本身继承 DependencyObject 且它在子属性值更改时能够提供变化通知。 所以我们可以创建一个自定义 Freezable 类,实现我们的功能,如下: public class CustomFreezable : Freezable { public static readonly 其次探索如何通过曲线救国,实现以 Binding 的方式实现隐藏DataGridTextColumn,我们借助了一个核心抽象类 System.Windows.Freezable。 Objects Overview:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/advanced/freezable-objects-overview

    2.9K10编辑于 2023-11-23
  • 来自专栏czwy的博客

    如何让WPF中的ValidationRule实现参数绑定

    思路是利用资源字典和Freezable类。 即使不在逻辑树中的对象也可以通过key访问到资源。 Freezable类的主要目的是定义具有可修改状态和只读状态的对象,但是比较幸运的是这个类的实例不在可视化树或逻辑树中也可以继承到DataContext,目前我也不清楚这里的原理。 根据这两点信息,首先定义一个继承于Freezable的类BindingProxy,包含一个用于绑定数据的依赖属性DataProperty。 public class BindingProxy : Freezable { protected override Freezable CreateInstanceCore() { 本文的案例也是在这个地方卡壳了,虽然最终解决了这个问题,但是Freezable类如何继承到DataContext的原理还有待研究。

    1.7K20编辑于 2023-10-22
  • 来自专栏IOT物联网小镇

    Linux驱动实践:中断处理中的【工作队列】 workqueue 是什么鬼?

    * * system_freezable_wq is equivalent to system_wq except that it's * freezable. system_long_wq; extern struct workqueue_struct *system_unbound_wq; extern struct workqueue_struct *system_freezable_wq = alloc_workqueue("events_freezable", WQ_FREEZABLE, 0) = alloc_workqueue("events_freezable_power_efficient", WQ_FREEZABLE | WQ_POWER_EFFICIENT, 0); ... } 此外,由于工作队列

    2.5K40编辑于 2021-12-28
  • 来自专栏CreateAMind

    麻醉苏醒的神经混沌记忆保持机制

    This phase of freezable chaos provides a novel mechanism of synaptic working memory in which a stable VIII.DISCUSSION A.Computational roles of freezable chaos Freezable chaos provides a novel mechanism In freezable chaos, any network state can be stored as a stable fixed point, dramatically increasing VII covers freezable chaos, a dynamic phase unique to the neuronal-synaptic system. 3 • Sec. VII A gives a a phenomenological overview of non-freezable, semi-freezable, and freezable chaos, which

    29660编辑于 2023-09-01
  • 来自专栏林德熙的博客

    dotnet 读 WPF 源代码笔记 创建 SolidColorBrush 性能没有想象那么差

    但 Brush 继承了 Animatable 类,咱继续看接下来的继承的类的构造 public abstract partial class Animatable : Freezable, IAnimatable protected Animatable() { } // 忽略代码 } public abstract class Freezable : DependencyObject, ISealable { protected Freezable() { Debug.Assert Freezable_Frozen && ! Freezable_HasMultipleInheritanceContexts && !

    97250发布于 2021-04-16
  • 来自专栏CreateAMind

    突触神经耦合的混沌动力特性

    This phase of freezable chaos provides a novel mechanism of synaptic working memory in which a stable VII covers freezable chaos, a dynamic phase unique to the neuronal-synaptic system. 3 • Sec. VII A gives a a phenomenological overview of non-freezable, semi-freezable, and freezable chaos, which In freezable chaos, halting synaptic dynamics results in the neurons flowing to a stable fixed point VIII B provides a general discussion ) VIII.DISCUSSION A.Computational roles of freezable chaos Freezable

    40820编辑于 2023-09-01
  • 来自专栏历史专栏

    【愚公系列】2023年11月 WPF控件专题 2023秋招WPF高频面试题

    Freezable 是一种特殊类型的对象,具有两种状态:unfrozen 和 frozen。 解冻时,Freezable 的行为与任何其他对象一样。 冻结后,无法再修改 FreezableFreezable 提供了一个 changed 事件来通知观察者对对象的任何修改。 冻结 Freezable 可以提高其性能,因为它不再需要在更改通知上花费资源。 冻结的 Freezable 也可以跨线程共享,而未冻结的 Freezable 则不能。 尽管 Freezable 类有许多应用程序,但 WPF中的大多数 Freezable 对象都与图形子系统相关。 34.Freezable.Clone() 和 Freezable.CloneCurrentValue() 方法有什么区别?Clone 实际上复制绑定表达式。

    4.6K22编辑于 2023-11-20
  • 来自专栏walterlv - 吕毅的博客

    WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

    Freezable Freezable 是继承自 DispatcherObject 的一个抽象类,其出现的主要目的就是解决 WPF 单线程模型带来的负面性能影响。 Freezable 主要由那些与图形渲染强相关的 WPF 类型继承,比如 Brush、Transform、Geometry、D3DImage 还有各种动画等。典型的,这些类型都对高性能渲染有要求。 你可以对 Freezable 对象调用 Freeze() 方法,调用之后,其 Dispatcher 属性会被设为 null,于是对象可以跨线程访问。 这点跟 Freezable 是不一样的,Freezable 是需要自己主动编写 XAML 或 C# 代码进行 Freeze 的。 因为切换关联 Dispatcher 的方法都是 internal 的 不过我们可以使用反射来间接实现这个效果(当然,你需要自行承担线程安全后果,以及切换不完全造成的跨线程访问问题) ---- 参考资料 Freezable

    1.4K20发布于 2020-02-10
  • 来自专栏Linux内核远航者

    深入理解Linux内核之进程睡眠(下)

    hrtimer_sleeper_start_expires(t, mode); //开启高精度定时器 if (likely(t->task)) freezable_schedule set_current_state(TASK_RUNNING); //设置为可运行状态 do_nanosleep函数是睡眠的核心实现:首先设置任务的状态为可中断的睡眠状态,然后开启了之前设置的高精度定时器,随即调用freezable_schedule 来看下freezable_schedule: //include/linux/freezer.h freezable_schedule ->schedule() ->__schedule(false

    2.8K20发布于 2021-08-06
  • 来自专栏林德熙的博客

    WPF 后台代码做 TranslateTransform 的动画

    说为什么相同的代码,如果设置到按钮上,是可以让按钮的某个属性变更,但是如果设置给 TranslateTransform 的 X 或 Y 就不会有任何值变更 在 WPF 中,通过 官方文档 里面的描述,对于 Freezable storyboard.Children.Add(doubleAnimation); storyboard.Begin(); } 如果想要给 Freezable 类型的对象做动画,可以通过间接的方法,也就是通过 Freezable 类型的对象所在的元素,使用点的方式写出来具体的代码 private void Button_OnClick(object

    1.2K20编辑于 2021-12-24
  • 来自专栏程栩的性能优化笔记

    全新系列-Linux进程管理初探

    TASK_NOLOAD 0x00000400 #define TASK_NEW 0x00000800 #define TASK_RTLOCK_WAIT 0x00001000 #define TASK_FREEZABLE 0x00002000 #define __TASK_FREEZABLE_UNSAFE (0x00004000 * IS_ENABLED(CONFIG_LOCKDEP)) #define */ #define TASK_FREEZABLE_UNSAFE (TASK_FREEZABLE | __TASK_FREEZABLE_UNSAFE) /* Convenience macros for

    47210编辑于 2023-11-01
  • 来自专栏linux驱动个人学习

    进程冻结

    用户进程默认是可以被冻结的,借用信号处理机制实现;内核线程和work_queue默认是不能被冻结的,少数内核线程和work_queue在创建时指定了freezable标志,这些任务需要对freeze状态进行判断 kernel threads可以通过调用kthread_freezable_should_stop来判断freezing状态,并主动调用__refrigerator进入冻结;work_queue通过判断

    1.7K30编辑于 2023-03-08
  • 来自专栏独立观察员博客

    不可不知的WPF几何图形(Geometry)

    Geometry类继承自Freezable类,因此可以声明为资源,对象之间共享,变为只读提高性能,或者克隆及线程安全等。具体可了解Freezable相关知识。 具体如下: Geometry继承自Freezable类,而Shape继承自FrameworkElement。

    98910编辑于 2024-11-23
  • 来自专栏全栈程序员必看

    linux大量kworker_linux load average 非常高

    . * * system_freezable_wq is equivalent to system_wq except that it's * freezable. * * *_power_efficient_wq ); system_unbound_wq = alloc_workqueue("events_unbound", WQ_UNBOUND, WQ_UNBOUND_MAX_ACTIVE); system_freezable_wq = alloc_workqueue("events_freezable", WQ_FREEZABLE, 0); system_power_efficient_wq = alloc_workqueue( "events_power_efficient", WQ_POWER_EFFICIENT, 0); system_freezable_power_efficient_wq = alloc_workqueue ("events_freezable_power_efficient", WQ_FREEZABLE | WQ_POWER_EFFICIENT, 0); } struct workqueue_struct

    4.2K10编辑于 2022-11-08
  • 来自专栏walterlv - 吕毅的博客

    WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference!

    </TextBlock> </Grid> </Window> 至于 BindingProxy,非常简单: public sealed class BindingProxy : Freezable GetValue(DataProperty); set => SetValue(DataProperty, value); } protected override Freezable

    4.8K50发布于 2020-02-10
  • 来自专栏林德熙的博客

    dotnet 读 WPF 源代码笔记 渲染收集是如何触发

    TranslateTransform 为例,在更改 TranslateTransform 的 X 或 Y 属性的值的时候,如果没有给此 TranslateTransform 对象建立直接渲染关系,也就是 Freezable 也就是说在 TranslateTransform 对象想要影响到最终界面渲染,需要被动在渲染收集时,才会更新数据 class Freezable { private void AddSingletonContext 此 SingletonHandler 委托将会在继承 Freezable 的类型的依赖属性变更的时候,支持被调用 // 对于建立直接联系的对象,如存放在 UIElement 上的

    1.1K10发布于 2021-09-18
  • 来自专栏Dotnet9

    WPF面试题-来自ChatGPT的解答

    以下是一个示例,演示如何创建和使用可冻结对象: public class MyFreezableObject : Freezable { protected override Freezable Freezable.Clone() 和 Freezable.CloneCurrentValue() 方法有什么区别? Freezable.Clone()和Freezable.CloneCurrentValue()是用于创建Freezable对象的副本的方法,它们之间的区别如下: Freezable.Clone():Clone ()方法创建一个Freezable对象的完全副本,包括所有的属性和子对象。 Freezable.CloneCurrentValue():CloneCurrentValue()方法创建一个Freezable对象的副本,但只复制当前属性值,而不复制子对象的引用。

    4.3K30编辑于 2023-08-31
  • 来自专栏walterlv - 吕毅的博客

    WPF 中的 NameScope

    Freezable, FrameworkElement, FrameworkContentElement 等重写了这个属性。 但是,Freezable, InputBinding, Visual3D, GridViewColumn, ViewBase, CollectionViewSource, ResourceDictionary

    1.2K20发布于 2020-02-10
领券