システムがスリープ状態になったときに閉じる必要があるデバイス ドライバーを使用しています。次のように、 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 句を使用することをお勧めします。また、機能をイニシャライザ、デストラクタ、および関数自体に分散させるのではなく、自己完結型に保ちます。このイベントでハンドル宣言を使用することは可能ですか?
この問題の手がかりは、次のコードが機能することです。
AddHandler SystemEvents.PowerModeChanged, AddressOf SystemEvents_PowerModeChanged