【发布时间】:2016-11-06 19:22:56
【问题描述】:
我正在编写一个 VB 表单应用程序,它重定向进程的标准输出流并在 UI 中使用它。
我在调用带有参数的方法时遇到问题,这些方法会从 OutputHandler 子中更新表单上的控件。
我可以像这样调用不带参数的方法
Me.Invoke(New MyDelSub(AddressOf ServerStarted))
效果很好。
谷歌搜索告诉我,要调用带参数的方法,我应该这样做:
Dim del As JoinDelegate = AddressOf PlayerJoins
del.Invoke(username)
有了这个委托和方法对:
Private Delegate Sub JoinDelegate(ByVal username As String)
Private Sub PlayerJoins(ByVal username As String)
PlayersBox.Items.Add(username)
'Do other stuff
End Sub
但这会在该方法第一次尝试访问控件时产生 IllegalOperationException。
【问题讨论】:
-
该问题已被多次询问和回答。例如看看这篇文章:Cross-Thread operation not valid VB.NET。然而,使用Lambda Expressions 解决问题在语法上可能很有趣。
-
是的,我阅读了其中的一些,只是无法弄清楚如何使用它来传递参数。对不起,我很愚蠢;)
标签: vb.net multithreading winforms delegates