使用委托在另一个 Sub 内启动线程
Posted
技术标签:
【中文标题】使用委托在另一个 Sub 内启动线程【英文标题】:Using a delegate for thread start inside another Sub 【发布时间】:2022-01-20 17:49:20 【问题描述】:我得到的是这样的:
Private Sub GiantLegacySub()
... lots of variables and legacy code...
Dim somethingNew = New Func(of String, Boolean)(
Function(stringy as String) As Boolean
... new code that uses the legacy variables ...
End Function)
Dim t = New Thread(AddressOf somethingNew)
End Sub
我收到一条错误消息,指出somethingNew
被视为变量名而不是方法名,因此AddressOf
无法接受。 (我知道somethingNew
是一个变量,恰好包含一个指向方法的指针)。
有没有办法做到这一点?我需要将它留在GiantLegacySub
内,因为它的范围内变量的剪切量。
【问题讨论】:
AddressOf
用于将例程转换为委托。但是,在这种情况下,您已经有一个委托,因为您将 somethingNew
声明为委托。您应该能够直接提供somethingNew
而无需AddressOf
。唯一的问题是确保它与所需的签名匹配——请注意,如果您有Option Strict Off
,VB 会尽力提供帮助,并且可以让稍微不匹配的代表排队。
请注意System.Thread
将Sub
而非Function
作为参数(不带参数,或带单个Object
参数),因此您应该相应地修改您的声明.
【参考方案1】:
根据 Craig 的指导,答案如下:
Private Sub GiantLegacySub()
... lots of variables and legacy code...
Dim somethingNew = Sub(stringy as String)
... new code that uses the legacy variables ...
End Sub
Dim t = New Thread(somethingNew)
t.Start(someStringForStringy)
End Sub
【讨论】:
以上是关于使用委托在另一个 Sub 内启动线程的主要内容,如果未能解决你的问题,请参考以下文章