2016-05-17 31 views
1

使用的BeginInvoke在C#中使用BeginInvoke這樣的:如何在VB.NET

obj.BeginInvoke((Action)(() => 
{ 
    //do something 
})); 

我試圖把它翻譯成VB.NET,並結束了這段代碼,似乎工作:

obj.BeginInvoke(
    Sub() 
     'do something' 
    End Sub 
) 

片段看起來與我截然不同,尤其是因爲(Action) (() =>部分完全缺失。這是在VB.NET中使用BeginInvoke的正確方法嗎?


這是How to use BeginInvoke C#重複,因爲這個問題,每一個答案,使用C#(如果使用任何編程語言)。如果您不確定是否使用了正確的VB.NET語法,那麼C#代碼無助於您。

+2

對我來說很好。 Lambdas和匿名方法是C#和VB.NET之間非常不同的東西之一。 –

+0

可能重複的[如何使用BeginInvoke C#](http://stackoverflow.com/questions/14388136/how-to-use-begininvoke-c-sharp) –

+0

@Matt爲什麼這應該是重複的,如果這個問題是關於VB.NET的語法和重複的目標使用C#? – Breeze

回答

1

(Action)只是將lambda轉換爲Action,這在VB.NET中並不需要。所有你需要的Sub() lambda。

您已得到正確的轉換。

雖然請注意BeginInvoke()後面必須跟着EndInvoke(),否則你會得到線程泄漏。

+0

@Joey:你是對的,我的錯。 –

1

是的,(Action) (() =>不返回任何東西,因此在VB.Net中的Sub是等價的。如果它返回了某些東西,它將成爲C#中的Func。

+2

我相信他們想知道爲什麼在C#中需要強制轉換,而不是在VB中。 – Joey

+0

噢好吧,我明白你在說什麼,因爲VB.Net暗中投了 –