【问题标题】:.net c# WeakEventManager theory and practical usage.net c# WeakEventManager 理论与实际使用
【发布时间】:2022-09-24 05:11:20
【问题描述】:

嗨,我不清楚 WeakEventManager 在.net 中的用法。

我知道强参考和弱参考之间的区别。

  1. 保持强直到取消订阅没有发生。
  2. 周 - 调用 GC 收集时 => “非确定性时间”

    在第二种情况下,我会错过事件,因为可以随机删除侦听器。或者我错过了什么?

    例如 MVVM 社区工具包使用此模式在视图模型之间发送/接收消息。但是什么时候可以“随机”删除消息永远不会出现。

    有人能给我解释一下这种模式和安全性吗?谢谢

    标签: c# .net


    【解决方案1】:

    对对象的普通引用是强引用。此外,.Net 提供了一个特殊类,用于为特殊情况创建对对象的弱引用。 Microsoft 文档说,当应用程序的代码可以到达该对象时,GC 无法收集应用程序正在使用的对象。据说该应用程序对该对象具有强引用。 (在这里查看弱参考解释Microsoft Wark Reference documentation)。

    因此,当应用程序仍在使用侦听器时,不能从内存中随机删除它,换句话说,当它仍然对它有强引用时。例如,引用视图模型类的窗口的 DataContext 属性是对视图模型的强引用。 如果您使用弱事件管理器,它只会保留对已注册侦听器的弱引用,因此如果没有其他找到强引用(因为应用程序的其余部分不再使用该对象),则允许 GC 收集该对象。就应用程序而言,它不会引起任何问题,因为应用程序无论如何都不使用该对象。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2018-03-02
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多