1

我正在使用这样的系统事件:

            SystemEvents.SessionEnding += SystemEventsSessionEnding;

检测用户何时关闭或注销,但我已经读到我需要取消注册此事件以防止内存泄漏等。

我应该什么时候/在哪里这样做?

我已经看到我可以在 SystemEvents.EventsThreadShutdown 中做到这一点,此事件将在系统事件触发之前触发,如果这是真的,那么这应该是我应该取消注册系统事件的地方?

或者我应该在我的主窗体 FormClosing 事件中这样做吗?FormClosing 事件会一直被触发吗?

谢谢!

4

2 回答 2

3

您是否仅在程序开始时订阅一次,并且仅在进程终止时才取消订阅?如果是这样,请不要打扰。

当您的进程终止时,如果有任何“系统级”挂钩,则操作系统有责任为您清理这些挂钩 - 您无需担心。尽管进程不再存在,但操作系统不会阻止您的对象被垃圾收集:)

于 2011-09-03T08:26:13.737 回答
1

如果您需要在应用程序实例的整个生命周期内触发该事件时收到警报,那么不需要,您不需要取消注册它。如果您有订阅该事件的对象超出范围,那么它们应该取消注册,因为事件对象持有对订阅者的引用,从而防止它被 GC'd。

于 2011-09-03T08:27:41.357 回答