VB.NET中SystemEvents的句柄声明和AddHandler之间的区别

Kvermeer

我正在使用设备驱动程序,当系统进入睡眠状态时需要关闭它。我以为可以将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
汉斯·帕桑特

SystemEvents类的事件与您习惯的事件不同,它们是静态事件。在vb.net中“共享”发言。您可以通过意识到只有一个“系统”来推断出这一点因此,该活动只有一个来源。

这使得MSDN文章中有关WithEvents的文本与此相关:

您必须将WithEvents变量声明为对象变量,以便它们可以接受类实例。

您不能创建类型为SystemEvents的对象变量。因此,您不能使用WithEvents关键字。因此,您也不能使用Handles子句。退回AddHandler是一个严格的要求。

而且,非常重要的是,RemoveHandler当您不再对事件感兴趣时,必须显式使用例如在Form的FormClosed事件处理程序中。必要的是,当UI不再存在时,SystemEvents停止触发事件处理程序。忘记这样做会导致内存泄漏(无法垃圾收集表单对象),如果幸运的话,会抛出ObjectDisposedException。如果关闭表单或窗口也终止了您的应用程序,则只能跳过此要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

声明数组(vb.net)时()()和(,)之间的区别

来自分类Dev

VB.NET和VB之间的区别

来自分类Dev

VB.NET中<SomeName()>和<SomeNameAttribute()>之间的区别

来自分类Dev

vb.net和c#之间的GroupBy区别

来自分类Dev

WPF vb.net中的vbHidden和Windows.Visibility.Hidden之间的区别

来自分类Dev

VB.NET中“ FunctionName =值”和“返回值”之间的区别?

来自分类Dev

vb.net中Direct Query和存储过程的区别

来自分类Dev

VB.net如果或声明

来自分类Dev

预期的声明vb.net

来自分类Dev

VB.NET声明错误

来自分类Dev

VB6和VB.net中的IsNull

来自分类Dev

VB6和VB.net中的IsNull

来自分类Dev

VB6和VB.NET中的精度差异

来自分类Dev

vb .net之间的时间间隔

来自分类Dev

VB不声明变量

来自分类Dev

VB6中“空”和“无”之间有什么区别?

来自分类Dev

用于以编程方式创建的对象的 VB.NET AddHandler

来自分类Dev

VB.NET中高效的多变量声明和赋值

来自分类Dev

VB.NET中高效的多变量声明和赋值

来自分类Dev

VB.Net中的组成和继承

来自分类Dev

vb.net中的校验和计算

来自分类Dev

vb.net和C#问题中编码的区别

来自分类Dev

vb.net和C#问题中编码的区别

来自分类Dev

VB NET,累积损坏

来自分类Dev

VB Net IsDBNull问题

来自分类Dev

Vb.net-FolderBrowserDialog

来自分类Dev

VB.NET FolderBrowserDialog

来自分类Dev

Vb.Net-UpdateDriverForPlugAndPlayDevices

来自分类Dev

Vb.net-FolderBrowserDialog