Lambda多行作为Thread参数?

ElektroStudios

前段时间,我看到了这样的多线程技术代码:

Private Delegate Sub TextBoxUpdateUI(ByVal txt As String)

Private t As Threading.Thread = New Threading.Thread(Sub() _
        If tb2.InvokeRequired Then 
            Dim tb_delegate As New TextBoxUpdateUI(AddressOf "This Sub")
            tb2.Invoke(tb_delegate, Text)
        Else
            tb2.Text = tb1.Text
        End If _
)

事实是,能够在Thread参数内编写一些指令,我不太记得我所看到的示例,但是如果我没记错的话,它使用的Lambda是我尝试使用的方式。

但是上面的代码不起作用,只是我想重现它,但是我丢失了我看到的示例,所以我不知道该怎么写。

有人可以修复lambda吗?

另外,在AdressOf操作员的委托行中,如何解决此问题?

史蒂文·多格特

VB.NET中的lambda表达式有两种语法样式:单行和多行。在执行多行表达式时,实际上需要在SuborFunction声明之后立即转到新行如果您不这样做,它将假定它是单行表达式。因此,第一个问题是您在后面有一个换行符,Sub() _这意味着以下If语句与Sub声明在同一行,因此假定它是单行表达式。

第二个问题是,当编写多行lambda表达式时,必须以End SuborEnd Function语句结尾您的代码缺少该行。因此,要修复您的代码,只需像这样更改它:

Private t As Threading.Thread = New Threading.Thread(Sub()
        If tb2.InvokeRequired Then 
            Dim tb_delegate As New TextBoxUpdateUI(AddressOf "This Sub")
            tb2.Invoke(tb_delegate, Text)
        Else
            tb2.Text = tb1.Text
        End If
    End Sub
    )

值得一提的是,这是一个可怕的例子。在此示例中,线程唯一要做的就是调用回UI线程,该线程当然是单线程的,因此完全不需要多余的线程。如果这确实是您要尝试的全部操作-在UI线程上调用某些内容,但不坐下来等待UI处理请求-您应该使用BeginInvoke代替Invoke,就像这样(不需要新线程):

If TextBox1.InvokeRequired Then
    TextBox1.BeginInvoke(Sub() TextBox1.Text = "sometext")
Else
    TextBox1.Text = "sometext"
End If

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递lambda作为参数

来自分类Dev

Lambda作为模板参数

来自分类Dev

传递lambda作为参数

来自分类Dev

使用Lambda作为If语句的参数

来自分类Dev

Lambda作为默认参数失败

来自分类Dev

Lambda函数作为参数传递

来自分类Dev

使用模板参数作为lambda的参数进行参数化

来自分类常见问题

使用DataProvider传递lambda作为testng参数?

来自分类Dev

将函数作为参数传递(Lambda)

来自分类Dev

Lambda将迭代器作为参数

来自分类Dev

Python,lambda函数作为groupby的参数

来自分类Dev

如何使用lambda作为默认参数?

来自分类Dev

将lambda函数作为HOF的参数传递

来自分类Dev

在 Kodein 中将 lambda 作为参数传递

来自分类Dev

将 OrderBy lambda 函数作为参数传递

来自分类Dev

Lambda 作为 Android onClicklistener 中的函数参数

来自分类Dev

当lambda作为参数传入时,推导模板参数

来自分类Dev

无法将Callable作为参数启动C ++ std :: thread

来自分类Dev

lambda作为jinja2过滤器的参数?

来自分类Dev

如何获取使用lambda作为参数发送的属性的名称

来自分类Dev

将lambda函数作为参数传递给需要接口的方法

来自分类Dev

获取作为函数传递的Lambda中的参数的引用

来自分类Dev

接受lambda作为函数参数并提取返回类型

来自分类Dev

将lambda表达式作为函数参数传递

来自分类Dev

不能使用lambda表达式作为动态参数

来自分类Dev

Lambda作为成员函数模板的默认参数

来自分类Dev

std :: bind():以右值引用作为参数绑定lambda

来自分类Dev

lambda可以使用* args作为其参数吗?

来自分类Dev

C ++ lambda作为参数。错误:使用已删除的功能