It's an anonymous function, and VB.Net does not support anonymous functions like that (assuming .Net 2.0, since in .Net 3.5 that would be written as a lambda expression).
The best you can do in VB.Net is add the anonymous function (the delegate) as a separate method in the same class and use the AddressOf operator to reference this new method.
Update:
Reading your code again, the translation is complicated because your anonymous method will be interpreted as a closure, and that means the C# compiler does a complicated transformation on the code before turning it into IL; a whole new class is created is to capture (close over) the local variables referred to in the method:
Class InnerInvokerClosure
Public instance As Object
Public inputs() As Object
Public staOutputs() As Object
Public retValue As Object
Public _innerInvoker As SomeDelegateType
Sub New(ByRef instance as Object, ByRef inputs() as Object, ByRef staOutputs() As Object, ByRef retValue As Object, ByRef _innerInvoker As SomeDelegateType)
Me.instance = instance
Me.inputs = inputs
Me.staOoutputs = staOutputs
Me.retValue = retValue
Me._innerInvoker = _innerInvoker
End Sub
Public Function Invoke() As Object
retValue = _innerInvoker.Invoke(instance, inputs, staOutputs);
End Function
End Class
Public Function Invoke(ByVal instance As Object, ByVal inputs() as Object, ByRef outputs() As Object) As Object
Dim closure As New InnerInvokerClosure(instance, inputs, Nothing, Nothing, _innerInvoker)
Dim t As New Thread(AddressOf closure.Invoke)
t.SetApartmentState(ApartmentState.STA)
t.Start()
t.Join()
outputs = closure.staOutputs
return closure.retValue
End Function
Note that this translation is untested and probably wrong: the exact transformation can be very complicated.