我正在写一个VB窗体应用程序,它重定向一个进程的标准输出流并在UI中使用它。VB窗体交叉线程方法调用参数
我无法通过参数更新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的该方法第一次尝试访问控件。
该问题已被问及多次回答。例如,看看这篇文章:[跨线程操作无效的VB.NET](http://stackoverflow.com/questions/1331009/cross-thread-operation-not-valid-vb-net)。但是,使用[Lambda Expressions](https://msdn.microsoft.com/en-us/library/bb531253.aspx)来解决问题可能在语法上很有趣。 –
是的,我通读了其中的一些,只是无法弄清楚如何使用它来传递参数。对不起,愚蠢;) – JHall