How can I create a new thread AddressOf a function with parameters in VB?

北城以北 提交于 2019-11-29 14:36:02

When you start a thread this way your function must have one or less parameters. If you specify one parameter, it must be from type Object.

In your function you can simply cast this object parameter to your datatype:

private sub startMe(byval param as Object)
     dim b as Boolean = CType(param, Boolean)
     ...
end sub

When you want to pass multiple parameters, you can put them together into a class like this:

public class Parameters
     dim paramSTR as String
     dim paramINT as Integer
end class

private sub startMe(byval param as Object)
     dim p as Parameters = CType(param, Parameters)
     p.paramSTR = "foo"
     p.paramINT = 0
     ...
end sub

To start your Thread:

dim t as new Thread(AddressOf startMe)
dim p as new Parameters
p.paramSTR = "bar"
p.oaramINT = 1337
t.start(p)

It looks like it's because the method you're delegating to has a Boolean parameter: '...does not allow narrowing...' Change the signature to use Object.

Viktor Ek

You should follow al-eax's answer, but another way would be to not pass parameters in the Thread.Start() function at all, but rather evaluate it in the test sub...

Dim _thread1 As Thread

Private Sub test()
    If someTest = True then    
        _thread1 = New Thread(AddressOf test2)
        _thread1.Start()
    End If
End Sub

Private Sub test2()
    /.../
End Sub

...or declare it as a global variable...

Dim _thread1 As Thread
Dim boolTest As Boolean

Private Sub test()
    boolTest = True

    _thread1 = New Thread(AddressOf test2)
    _thread1.Start()
End Sub

Private Sub test2()
    If boolTest = True Then
        /.../
    End If
End Sub
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!