Vb.net 如何获取模块内a子程序的引用

Vb.net 如何获取模块内a子程序的引用,vb.net,methods,module,subroutine,Vb.net,Methods,Module,Subroutine,我需要找出如何通过引用来引用另一个模块中的子例程。这就是我想做的: Module Mod1 sub_x(pass a reference to this module) Private Sub close_me() ' do something here End Sub End Module Module Mod2 Public Sub sub_x(get the reference to the passed module) ref

我需要找出如何通过引用来引用另一个模块中的子例程。这就是我想做的:

Module Mod1

   sub_x(pass a reference to this module)

   Private Sub close_me()
       ' do something here
   End Sub

End Module

Module Mod2

    Public Sub sub_x(get the reference to the passed module)
      reference to passed module.close_me()
    End Sub

End Module
Sub_x将接收来自多个不同模块的呼叫。所有调用模块都将有一个close_me()子例程。因此,我需要知道哪个模块正在调用sub_x,以便知道要关闭哪个模块。

在Mod2中:

Public Sub sub_x(ByVal closeModule As Action)
    closeModule()
End Sub
在Mod1中:

Mod2.sub_x(AddressOf Mod1.close_me)

vb中的模块类似于类中的
共享
函数。没有模块实例或“关闭”模块的概念。如果你想要这个功能,可以使用没有共享方法的类。我不是真的要关闭这个模块。close_me()函数指的是模块内部发生的事情。请注意,除非使用一些内置技术(如
Sync
谢谢Joel),否则这不会是线程安全的,但是它在Mod1中给了我一个错误,说me在模块中无效。请将其更改为模块名称。我也不能使用模块名称,但如果我不使用它,它似乎会毫无错误地接受它。如果我将鼠标移到它上面,它会显示我正在引用的模块的名称。但是,当我运行它时,它实际上并不调用模块。如果我追踪它,并在Mod2中显示closeModule的值,它表明它确实是System.Action。在进一步检查之后,我发现删除“Me”引用并将其留空会得到-{Method={Void close\u this\u window()}}System.Action的值。我认为“Void”应该是我模块的名称。所以我需要弄清楚如何在没有错误的情况下传递它。最后,这确实奏效了。我需要去掉“me”和“mod1”的名称,只使用子程序的名称。最初我没有在参数中包含“ByVal”引用,这导致它无法工作,但一旦包含它,它就开始工作了。谢谢你的帮助。