You can only pass a sub that takes no arguments into the constructor for the Thread class, as you noticed. This is because it has to match the ThreadStart delegate, which is declared like this:
Public Delegate Sub ThreadStart()

Only Subs that match that delegate, and therefore take no arguments, are accepted.

You can still pass information into your thread, however. One way that is recommended by the .NET documentation is to create a separate class for your new thread. Here's an example of what I'm talking about:
Code:
    Shared Sub Main()
        Dim C As New TheNewClassForTheThread()
        Dim T As New System.Threading.Thread(AddressOf C.ThreadSub)
        C.Text = "This message is being shown from a different thread."
        T.Start()
    End Sub

    'You might want to give this class a shorter name
    Class TheNewClassForTheThread
        Public Text As String
        Public Sub ThreadSub()
            MsgBox(Text)
        End Sub
    End Class