问题标签 [freezable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
10901 浏览

wpf - 派生自 Freezable 的 WPF 对象如何在 XAML 中冻结?

WPF 中的许多类型都派生自Freezable. 它为可变 POCO 对象提供不变性,并允许在某些情况下提高性能。

所以我的问题是,如何冻结 XAML 标记中的对象?

(请注意,我也发布了一个类似但不同的问题)。

0 投票
4 回答
24478 浏览

wpf - 在哪些场景下冻结 WPF 对象对性能有很大的好处?

WPF 中的许多类型都派生自Freezable. 它为可变 POCO 对象提供了不变性,并且显然可以在某些情况下提高性能。

有没有人发现在他们的 WPF 应用程序中冻结对象大大提高了性能?如果是这样,那么在冻结时哪些项目的性能差异最大?

(请注意,我也发布了一个类似但不同的问题

0 投票
1 回答
5981 浏览

wpf - 什么是可冻结的父级?这个错误是什么意思?

我收到此错误:

不能使用属于与其父 Freezable 不同的线程的 DependencyObject

那有什么意思?是英文的吗?父母是冻结的,还是只是可冻结的?如果它使错误消失,有什么方法可以使父母不可冻结?

发生了什么:

我在一个 WPF 应用程序中有两个 opengl winforms 控件,到目前为止,一切都很顺利(我认为)。现在,我添加了一个更新,这样当一个 winform 控件更新图像时,另一个也应该更新。这实际上曾经有效,现在我得到了那个错误。单步执行代码会在随机位置发生崩溃,这让我相信这是垃圾收集错误(即,另一个线程中的某些更新正在创建正在收集垃圾的东西,并且该收集是在随机时间发生的)。

异常在主运行方法中被捕获,它是一个 InvalidOperationException。

我在这里抓着稻草。我从哪里开始?

编辑:看起来导致问题的调用是这个:

我仍在追踪它;如果这一系列行被注释掉,崩溃仍然会发生,并且线程状态有一个“刚刚结束”的线程(因此是垃圾收集假设)。

0 投票
1 回答
4210 浏览

wpf - 为什么 CompositeCollection 不可冻结?

我正在使用 MVVM 模式编写应用程序。我通过将视图的 DataContext 属性设置为 ViewModel 的实例来向视图提供数据。一般来说,我只是从那里使用 Binding 并按照我的方式行事。

最近,我尝试使用 ViewModel 提供的“Select Item”集合之外的“额外”元素来实现一个 ComboBox。

问题是,CompositeCollection 不是 Freezable: Freezable Objects Overview。这只会导致静态 ComboBoxItem 出现,而​​我的绑定表达式没有任何结果。

我对这个问题的最初反应是实现我自己的可冻结的 CompositeCollection版本。然而,这引出了以下问题:

为什么 CompositeCollection 首先不是 Freezable ?

我担心的是,这些决定通常是有原因的,我觉得我对 Freezable 了解得不够多,无法说出他们为什么没有继承它。我知道我可以实现这个集合,但我担心如果我这样做会在性能上产生可衡量的差异。

任何帮助,将不胜感激。谢谢!

另外:请注意,我意识到我可以插入 Null 或其他一些特殊值,并提供模板或 valueconverter 来做我想做的事。这不是我感兴趣的问题……只有上面粗体字的问题。

更新:

在 ArsenMkrt 的评论带来的一些进一步研究之后,我相信这实际上是一个疏忽。证据是这样的:

  1. 有一个冻结的集合,称为FreezableCollection<T>. 它不会产生 CollectionViews,这使得它不适合我的需求。
  2. MSFT 的 Sam Bent 在上面的链接中说了这么多。我还找不到他的联系方式,但如果有机会,我打算和他讨论一下。

我目前解决这个问题的计划是创建一个具有 CompositeCollection 和FreezableCollection<T>. 我不知道它是否会起作用,但我正在考虑这样的事情:

如果有人有更好的选择,我想听听!

0 投票
1 回答
732 浏览

wpf - 扩展WPF动画类的奥秘

Silverlight 在其动画时间轴(如 DoubleAnimation)上有一个名为 EasingFunction 的属性,它允许您指定一个用于插入两个值的函数。即使它出现在 .NET 4 中,我也想将它移植到 3.5。读完后,似乎很可行,但我遇到了一个奇怪的问题。

我正在像这样扩展 DoubleAnimation:

请注意,除了添加新属性之外,它没有做任何有趣的事情。

然后我可以在一些代码中使用它:

该代码可以很好地运行动画。

但是,如果我取消注释设置 EasingFunction 的行,动画将不再运行。我的 CreateInstanceCore 方法被调用,但 GetCurrentValue 从未被调用。诡异的?

0 投票
2 回答
802 浏览

c# - 在 WPF 之外使用 Freezable 类的任何“陷阱”?

我一直在阅读并发性,并从更“线程安全”的角度看待事物。WPF(或者实际上是 System.Windows.Freezable 和其他)有一个可冻结的类,它可以提供“冰棒不可变”。有没有人尝试在 WPF/Silverlight 之外使用它,使用它会更好,还是自己滚动/使用别人的更好?我知道那里有一些不错的。

0 投票
1 回答
1550 浏览

wpf - WPF 合并资源字典不一致

我有一个 ResourceDictionary,它由一个 Brush 对象和一个 Style 组成,它使用这个 Brush 对象在其 Template 属性中的几个动画属性(通过 StaticResource 标记扩展)。问题是; 当我将字典与全局应用程序 ResourceDictionary (Application.Resources) 合并时,Brush 不会冻结,并且共享 Style 的每个元素都会受到 Brush 更改的影响。

有趣的是,当我将 Brush 移动到辅助合并的 ResourceDictionary 时,它被冻结并且一切都按预期工作(freezable 在动画之前被克隆)只有当可冻结对象和其他一些资源通过 StaticResource 标记引用该对象时才会出现问题扩展驻留在同一个合并的 ResourceDictionary 中。我在下面粘贴了 App.xaml、Window.xaml 和 Dictionary.xaml 的示例代码。如果您能重现相同的结果并确认这是 WPF 中的错误,我将不胜感激。

注意:如果您在 Visual Studio 中将 ResourceDictionary (Dictionary.xaml) 的内容类型从 Page 更改为 Resource(并将其嵌入 XAML 而不是 BAML 版本到编译的程序集中),问题就会消失。

窗口.xaml

应用程序.xaml

字典.xaml

0 投票
2 回答
2081 浏览

.net - 自动冻结从模板构建的 wpf 对象

如果可冻结的 wpf 对象是通过 DataTemplate、ControlTemplate 或样式生成的,那么在任何情况下都会自动冻结它们是否正确?

0 投票
3 回答
1717 浏览

.net - 当我的代码都没有出现在堆栈中时,如何调试此错误?

我的应用程序有时会出现以下错误:

不能使用属于与其父 Freezable 不同的线程的 DependencyObject

我知道如何解决这种错误,但在那种情况下我不知道它发生在哪里,所以我不知道要修复什么......异常的堆栈跟踪只包含.NET框架代码,而不是我的代码(除了 Main 方法):

我怎样才能找到这个错误的原因?由于应用程序非常复杂,手动检查所有可以在另一个线程中执行的代码并不是一个真正的选择......

任何意见,将不胜感激 !

0 投票
1 回答
159 浏览

wpf - 更改冻结对象的可见性?

我正在尝试优化我的 WPF/VB.net 程序,并且正在考虑冻结一些对象。但是,虽然我知道无法冻结以任何方式进行动画处理的对象,但我需要知道……您可以更改冻结对象的可见性吗?

谢谢!