2016-05-17 30 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暗中投了 –