带有invoke的VB.net委托参数数组

带有invoke的VB.net委托参数数组,vb.net,Vb.net,我的解析器中有这段代码,我想将文本传递给Form1,这样我就可以更新一些标签或其他东西。 (我的结构如下:Form1->Engine->Parser) 有时我需要传递两个字符串,有时更多 Public Class Parser Public Event NewInfo(<[ParamArray]()> Byval strArray() as String) Public Sub SomeParser(ByVal m As Match) Dim strArray() As Strin

我的解析器中有这段代码,我想将文本传递给Form1,这样我就可以更新一些标签或其他东西。 (我的结构如下:Form1->Engine->Parser) 有时我需要传递两个字符串,有时更多

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
然后我在表格1中有这个:

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
公共类表单1
Private WithEvents引擎作为新引擎(Me)
公共委托子UpdateTextLabelDelegate(ByVal text()作为字符串)
公共子UpdateTextLabel(ByVal ParamArray str()作为字符串)
如果我需要的话
调用(新的UpdateTextLabelDelegate(UpdateTextLabel的地址),str())
其他的
(在这里做事)
端接头
末级
代码停在我这里。invoke(新的UpdateTextLabelDelegate)-线路。 异常类似于:System.Reflection.TargetParameterCountException 所以这意味着参数的数量不对。。如何正确地做到这一点


如果有人能解释,如果我能理解如何做,我将非常高兴。

我认为您的代码中不需要
,因为您正在传递的已经是一个数组:

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

我认为您的代码中不需要
,因为它已经是您要传递的数组:

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

终于解决了这个问题。这并不难,但我的错误是我内心的想法

我没有对Parser.vb做任何更改,因此上面的代码是可以的。 此外,未对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
公共类表单1
Private WithEvents引擎作为新引擎(Me)
公共委托子UpdateTextLabelDelegate(ByVal text()作为字符串)
公共子UpdateTextLabel(ByVal str()作为字符串)
如果我需要的话
调用(新的UpdateTextLabelDelegate(UpdateTextLabel的地址),新对象(){str})
其他的
"(在这里做事)
端接头
末级
因此,我所做的只是将
newobject(){args}
插入invoke行,并从
Public Sub-updateextlabel
-行中删除
ParamArray
。。
但是谢谢你踢了我的头,所以我有理由继续前进!:)

终于解决了这个问题。这并不难,但我的错误是我内心的想法

我没有对Parser.vb做任何更改,因此上面的代码是可以的。 此外,未对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
公共类表单1
Private WithEvents引擎作为新引擎(Me)
公共委托子UpdateTextLabelDelegate(ByVal text()作为字符串)
公共子UpdateTextLabel(ByVal str()作为字符串)
如果我需要的话
调用(新的UpdateTextLabelDelegate(UpdateTextLabel的地址),新对象(){str})
其他的
"(在这里做事)
端接头
末级
因此,我所做的只是将
newobject(){args}
插入invoke行,并从
Public Sub-updateextlabel
-行中删除
ParamArray
。。
但是谢谢你踢了我的头,所以我有理由继续前进!:)

这并不能解决任何问题。同样的问题依然存在。我还回答了这个问题:“代表和副代表-解决方案建议?”我还需要提到。。我来自另一个线程。我有一个叫做“引擎”的线程,这就是为什么我首先需要这个委托。这并不能真正解决任何问题。同样的问题依然存在。我还回答了这个问题:“代表和副代表-解决方案建议?”我还需要提到。。我来自另一个线程。我有一个叫做“引擎”的线程,这就是为什么我首先需要这个委托。