我正在使用一个设备驱动程序,当系统进入睡眠状态时我需要关闭它。我想我可以将SystemEvents.PowerModeChanged事件的处理程序添加到 ApplicationEvents.vb,如下所示:
Public Sub SystemEvents_PowerModeChanged(sender As Object, e As PowerModeChangedEventArgs) _
Handles SystemEvents.PowerModeChanged
If e.Mode = PowerModes.Suspend Then
logger.Trace("The computer is suspending. Closing device.")
'Close device
ElseIf e.Mode = PowerModes.Resume Then
logger.Trace("The computer is resuming operation from suspend mode. Opening device.")
' Open device
End If
End Sub
使用Handles
关键字处理事件。但是,Handles 子句存在编译错误:
Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
WithEvents 似乎总是为我在 .NET 中遇到的其他事件定义的,那么为什么这个不同呢?我更喜欢使用 Handles 子句,因为这会自动添加和删除处理程序。它还保持功能自包含,而不是将其分布在初始化程序、析构函数和函数本身之间。是否可以在此事件上使用 Handles 声明?
这个问题的一个线索是以下代码确实有效:
AddHandler SystemEvents.PowerModeChanged, AddressOf SystemEvents_PowerModeChanged