gpt4 book ai didi

c# - 取消 WPF 应用程序中的 Unloaded 事件

转载 作者:行者123 更新时间:2023-12-03 21:01:36 25 4
gpt4 key购买 nike

我实现了一个 WPF 应用程序,它使用 NavigationService 在页面之间导航。
当我从一个页面切换到另一个页面时,会为属于前一页面的每个图形元素引发 Unloaded 事件。
有没有办法在不访问图形元素而只能访问容器的情况下取消该事件?

最佳答案

由于 Unloaded(和 Loaded,就此而言)不是隧道事件,我认为没有任何方法可以在高级别取消它。

我很好奇你想要达到的目标。您是否正在释放与子项关联的资源?您是否担心返回此页面并重新初始化资源的影响?如果是这样,也许应用程序缓存是存储它们的更好地方,这样您就可以知道它们何时被初始化、它们被使用的频率等。这也将为您提供一个集中的地方来清理缓存的资源,以防万一内存压力或您知道先前步骤中的资源无效的情况(例如,您已完成向导,因此您知道不需要与向导中先前步骤关联的任何资源)。

或者,如果您正在寻找完全取消导航的机会,我相信您正在寻找 Navigating 事件。取消此事件应停止加载新资源并防止当前页面更改。

--添加有关缓存解决方案的信息(不适合评论)

我的第一个想法是,只有在知道某些事情实际上是现实世界中的性能问题时,才应该进行优化。如果这确实是个问题,您可以创建一个位于应用程序中的单例缓存对象来管理这些对象。我确信有一些我不知道的预构建解决方案,但是一个包含在 Singeton 对象中的字符串键的接口(interface)中的字典对于简单的应用程序来说就足够了。然后您可以通过一个简单的界面访问它

CustomApplicationObjectCache[CACHE_KEY_CONSTANT_STRING] = new VisualBrush(...); //Or whatever type you have

但是,除非您正在处理一些非常重量级的对象或对象图,否则我怀疑缓存将是多余的,并且可能会妨碍 .NET 为垃圾收集做正确的事情。我建议对您的应用程序进行分析,看看这对您来说是否真的是一个性能问题。

关于c# - 取消 WPF 应用程序中的 Unloaded 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com