我在我的Parser中有这个代码,我想将文本传递给Form1,所以我可以更新一些标签或其他什么。 (我的结构如下:Form1 - > Engine - > Parser) 有时我需要传递2个字符串,有时候更多。
Public Class Parser
Public Event NewInfo(<[ParamArray]()> Byval strArray() as String)
Public Sub SomeParser(ByVal m As Match)
Dim strArray() As String = {"Word1", "Word2"}
RaiseEvent NewInfo(strArray)
End Sub
End Class
然后我有另一个班。我将Array传递给Engine,然后传递给Form1,最后:
Public Class Engine
Private parent as Form1
Private WithEvents Parser As New Parser
Private Sub New(ByRef parent as Form1)
Me.parent = parent
EndSub
Private Sub ChangeLabel(ByVal str() As String) Handles Parser.NewInfo
parent.UpdateTextLabel(str)
End Sub
然后我在Form1中有这个:
Public Class Form1
Private WithEvents Engine as New Engine(Me)
Public Delegate Sub UpdateTextLabelDelegate(<[ParamArray]()> ByVal text() As String)
Public Sub UpdateTextLabel(ByVal ParamArray str() As String)
If Me.InvokeRequired Then
Me.Invoke(New UpdateTextLabelDelegate(AddressOf UpdateTextLabel), str())
Else
(Do stuff here)
End Sub
End Class
代码停在Me.invoke(New UpdateTextLabelDelegate).... - line。 异常类似于:System.Reflection.TargetParameterCountException 所以它意味着错误的参数数量。如何正确地做到这一点?
如果有人能够解释并且我能理解如何做到这一点,我会很高兴。
答案 0 :(得分:2)
我认为您的代码中不需要<[ParamArray]()>
,因为它已经是您传递的数组:
Public Delegate Sub UpdateTextLabelDelegate(ByVal text() As String)
至于通过调用传递数据,请不要使用str()
,只需使用str
Public Sub UpdateTextLabel(ByVal str() As String)
If Me.InvokeRequired Then
Me.Invoke(New UpdateTextLabelDelegate(AddressOf UpdateTextLabel), str)
Else
'(Do stuff here)
End If
End Sub
答案 1 :(得分:1)
终于设法解决了这个问题。这并不困难,但我的错误在我自己的脑海里。
我没有对Parser.vb做任何更改,所以上面的代码是OK。 此外,没有对Engine.vb的更改。 对Form1.vb的更改如下:
Public Class Form1
Private WithEvents Engine as New Engine(Me)
Public Delegate Sub UpdateTextLabelDelegate(<[ParamArray]()> ByVal text() As String)
Public Sub UpdateTextLabel(ByVal str() As String)
If Me.InvokeRequired Then
Me.Invoke(New UpdateTextLabelDelegate(AddressOf UpdateTextLabel), New Object() {str})
Else
'(Do stuff here)
End Sub
End Class
所以,我所做的就是将New Object() {args}
插入到调用行,并从ParamArray
行中删除Public Sub UpdateTextLabel
。
但感谢踢我的头,所以我有理由继续前进! :)