事件处理程序范围问题



我已经为此苦苦挣扎了几个小时。 希望你们中的一些人 vb.net 大师可以帮助我恢复理智。

场景 :我有一个对象 (mqtt_client(,它公开了我需要捕获和处理的连接/断开连接事件。 我需要从代码中的多个子/函数/模块访问该对象。所以我在封闭类内但在代码块之外声明它是 Public。

如果我像这样在主子之外声明它:

Public mqtt_client = New MqttFactory().CreateManagedMqttClient
Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Add Event Handlers for Connected and disconnected events
    AddHandler mqtt_client.Disconnected, AddressOf MQTTclient_disconnected_handler
    AddHandler mqtt_client.Connected, AddressOf MQTTclient_connected_handler

添加处理程序失败,因为mqtt_client没有公开事件,我不确定为什么。

但是,如果我这样做:

 Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim mqtt_client = New MqttFactory().CreateManagedMqttClient
    ' Add Event Handlers for Connected and disconnected events
    AddHandler mqtt_client.Disconnected, AddressOf MQTTclient_disconnected_handler
    AddHandler mqtt_client.Connected, AddressOf MQTTclient_connected_handler

然后 addhandler 可以很好地连接,但是该对象仅在 sub 内部具有作用域,并且无法从其他模块访问。

我不能将所有这些代码放在封闭块之外,因为 addhandler 是一种方法,在那里不起作用。

我应该怎么做? 任何指导都将不胜感激。

类型推断仅适用于局部变量,因此虽然这为mqtt_client提供了带有Option Infer On.CreateManagedMqttClient类型:

Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim mqtt_client = New MqttFactory().CreateManagedMqttClient

这给了它类型 Object

Public mqtt_client = New MqttFactory().CreateManagedMqttClient
Public Sub Ruptela_Server(sender As Object, e As EventArgs) Handles MyBase.Load

使用 As 为字段指定显式类型,并在项目级别启用Option Explicit以避免将来出现问题。(Option ExplicitOption Strict 应始终为所有源打开。

相关内容

  • 没有找到相关文章

最新更新