這是一個匿名函數,和VB.Net不支持這樣的匿名函數(假定NET 2.0,因爲在.net 3.5,將被寫爲一個lambda表達式)。
您可以在VB.Net中做的最好的做法是將匿名函數(委託)作爲單獨的方法添加到同一個類中,並使用AddressOf運算符來引用此新方法。
更新:
重讀你的代碼,翻譯是複雜的,因爲你的匿名方法將被解釋爲封閉,這意味着C#編譯器對代碼打開前一個複雜的轉型它進入IL;創建一個全新的類是捕捉(封蓋)的方法中提到的局部變量:
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
注意,這個翻譯是未經測試,可能是錯誤的:確切的轉型是非常複雜的。
fyi:我也更新了我的答案。 – 2009-08-24 16:22:28
從來沒有代碼一個單一的VB.NET程序我相當滿意的結果大聲笑 – 2009-08-25 06:28:31