c# - 什么时候真正对 WPF 控件使用 Freeze()?

标签 c# wpf user-interface

我应该将我创建的所有画笔设置为卡住背景还是直接指定为背景?我没有修改的其他用户控件呢?

A Freezable provides a Changed event to notify observers of any modifications to the object. Freezing a Freezable can improve its performance, because it no longer needs to spend resources on change notifications. A frozen Freezable can also be shared across threads, while an unfrozen Freezable cannot.

由此看来,如果我的应用程序从不对创建的画笔进行任何更改,那么无论我是否设置卡住它在性能方面都没有区别。我说得对吗?

最佳答案

您应该尽可能将任何会被大量使用的画笔放在一个或多个资源字典中。

只要您不使画笔的一部分依赖于某些变量,它们就会自动卡住。将它们合并到 app.xaml 中,以便在整个应用程序中使用它们。

对于大多数 WPF 开发人员来说,这是他们会遇到的最常见的卡住用法,并且会自动完成。

如果您使用未卡住的可卡住对象,则将订阅已更改的事件,以驱动对 View 的潜在更改。如果您卡住它,则不会订阅此事件,因此效率更高。不过,在您可能注意到此类问题之前,您必须使用大量未卡住的可卡住对象。

如果您进行大量图形处理(例如编写游戏),那么将可卡住对象(例如动态构建的几何图形)从后台线程传递到 UI 可能会很有趣且很重要。但是,您可以编写大量业务应用程序而无需执行此类操作。

您可以卡住的内容相当有限——它们必须从 freezable 继承。用户控件没有。
如果您阅读列表,您可能会花更多时间思考“那是什么”,而不是“啊,是的,我可以看到自己卡住了一个……ThumbButtonInfo”。

https://learn.microsoft.com/en-us/dotnet/api/system.windows.freezable?view=netframework-4.8

关于c# - 什么时候真正对 WPF 控件使用 Freeze()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58696168/

相关文章:

c# - 如何使用 WPF 中的按钮/代码隐藏实例同步或访问 2 个 UserControl?

android - 如何将两个 View 放在水平布局中,使一个向左对齐,另一个向右对齐?

java - 如何打造专业定制的Java Swing Gui?

c# - 如何忽略 ASP.NET MVC 路由中 "controller/action"之后的所有字符?

c# - 将sqlite数据库同步到MYSQL数据库

c# - 取消异步套接字操作

c# - 在 WPF 窗口中确定窗口关闭发件人

c# - 获取用我的应用程序打开的文件的路径+文件名

c# - CefSharp WPF 错误

javascript - 仅使用 Javascript 在表格的最后一行显示按钮