如何在VB.NET中使用BeginInvoke

4
在C#中,您可以这样使用BeginInvoke
obj.BeginInvoke((Action)(() =>
{
    //do something
}));

我尝试将它翻译为VB.NET,最终得到了这段代码,看起来似乎可以工作:

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

这些代码片段看起来非常不同,尤其是(Action) (() =>部分完全缺失了。这是在VB.NET中正确使用BeginInvoke的方式吗?
这不是如何使用BeginInvoke C#的重复,因为问题和每个答案都使用C#(如果使用任何编程语言)。当您不确定是否使用了正确的VB.NET语法时,C#代码并没有什么用处。

2
看起来不错。Lambda表达式和匿名方法是C#和VB.NET之间非常不同的东西之一。 - Bradley Uffner
可能是如何使用BeginInvoke C#的重复问题。 - Matt Wilko
1
@Matt,如果这个问题是关于VB.NET语法的,而重复的目标使用C#,那为什么要将其视为重复问题呢? - Breeze
可能是重复内容 - 它确切地解释了Action是什么以及为什么存在。 - Matt Wilko
2个回答

2
只是将lambda转换为Action,在VB.NET中不需要这样做。你只需要Sub() lambda就可以了。

你已经有了正确的转换方式。

请注意,BeginInvoke()必须跟随EndInvoke(),否则你会得到线程泄漏。


1
是的,(Action) (() =>不返回任何内容,所以在VB.Net中Sub是等效的。如果它返回了什么东西,在C#中它将是一个Func。

2
我相信他们想知道为什么在C#中需要使用cast,而在VB中不需要。 - Joey
哦,好的,我明白你的意思了,这是因为VB.Net隐式转换。 - Jeremy Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接