【问题标题】:How to use BeginInvoke in VB.NET如何在 VB.NET 中使用 BeginInvoke
【发布时间】:2016-05-17 14:24:42
【问题描述】:

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

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

我尝试将它翻译成 VB.NET,并最终得到了这段代码,这似乎有效:

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

sn-ps 对我来说看起来很不一样,特别是因为 (Action) (() => 部分完全丢失了。这是在 VB.NET 中使用BeginInvoke 的正确方法吗?


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

【问题讨论】:

  • 对我来说看起来不错。 Lambda 和匿名方法是 C# 和 VB.NET 之间看起来非常不同的东西之一。
  • How to use BeginInvoke C#的可能重复
  • @Matt 如果这个问题是关于 VB.NET 语法并且重复的目标使用 C#,为什么这应该是重复的?
  • 可能重复 - 它准确解释了 Action 是什么以及它存在的原因

标签: c# .net vb.net begininvoke


【解决方案1】:

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

你得到了正确的转换。

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

【讨论】:

    【解决方案2】:

    是的,(Action) (() => 不返回任何内容,因此 VB.Net 中的 Sub 是等效的。如果它确实返回了某些东西,那将是 C# 中的 Func。

    【讨论】:

    • 我相信他们想知道为什么在 C# 中强制转换是必要的,而在 VB 中却没有。
    • 哦,好吧,我明白你在说什么,因为 VB.Net 隐式转换
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 2020-08-04
    • 2012-02-17
    • 2014-01-31
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多