C# 如何在VB.NET中使用BeginInvoke

C# 如何在VB.NET中使用BeginInvoke,c#,.net,vb.net,begininvoke,C#,.net,Vb.net,Begininvoke,在C#中,您可以这样使用BeginInvoke: obj.BeginInvoke((Action)(() => { //do something })); 我试着将其翻译成VB.NET,最终得到了以下代码,这似乎是可行的: obj.BeginInvoke( Sub() 'do something' End Sub ) 对我来说,这些代码片段看起来非常不同,特别是因为(Action)(()=>部分完全缺失。这是在VB.NET中使用BeginInvo

在C#中,您可以这样使用
BeginInvoke

obj.BeginInvoke((Action)(() =>
{
    //do something
}));
我试着将其翻译成VB.NET,最终得到了以下代码,这似乎是可行的:

obj.BeginInvoke(
    Sub()
        'do something'
    End Sub
)
对我来说,这些代码片段看起来非常不同,特别是因为
(Action)(()=>
部分完全缺失。这是在VB.NET中使用
BeginInvoke
的正确方法吗


这不是的副本,因为问题和每个答案都使用C#(如果使用任何编程语言)。当您不确定是否使用了正确的VB.NET语法时,C#-代码没有多大帮助。

是的,
(操作)()=>
不返回任何内容,因此VB.Net中的
Sub
是等效的。如果它确实返回了某个内容,那么它在C#中就是一个Func。

(Action)
只是将lambda强制转换为
Action
,这在VB.Net中是不需要的。
Sub()
lambda就是您所需要的

您已获得正确的转换


尽管注意,
BeginInvoke()
后面必须跟
EndInvoke()
,否则会出现线程泄漏。

在我看来很好。Lambdas和匿名方法是C#和VB.NET之间看起来非常不同的东西之一。可能重复@Matt如果这个问题是关于VB.NET语法的,并且重复的目标使用C#,为什么这应该是重复的?可能重复-它准确地解释了我相信他们想知道为什么在C#中强制转换是必要的,而在VB中不是。哦,好吧,我明白你的意思了,因为VB.Net隐式强制转换