试图在MSDN上了解Control.BeginInvoke代码

时间:2011-06-09 15:41:42

标签: vb.net begininvoke

我指的是MSDN上的document。我理解“.BeginInvoke”的作用,但是查看文档上的示例代码

Delegate Sub MyDelegate(myControl As Label, myArg2 As String)

Private Sub Button_Click(sender As Object, e As EventArgs)
   Dim myArray(1) As Object

   myArray(0) = New Label()
   myArray(1) = "Enter a Value"
   myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)
End Sub 'Button_Click

Public Sub DelegateMethod(myControl As Label, myCaption As String)
   myControl.Location = New Point(16, 16)
   myControl.Size = New Size(80, 25)
   myControl.Text = myCaption
   Me.Controls.Add(myControl)
End Sub 'DelegateMethod

委托myDelegate(和DelegateMethod)接受一个控件和一个字符串,但是,在.BeginInvoke中,传递了一个Label控件和一个数组......

myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)

并且在“DelegateMethod”中有

 myControl.Text = myCaption

不应该传递字符串而不是数组吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

BeginInvoke可以接受两个参数。一个是委托,在本例中是AddressOf DelegateMethod。

另一个参数是参数数组。 DelegateMethod接受两个参数:标签和字符串。为了使用begininvoke传递它们,将具有两个成员的对象数组传递给beinginvoke以匹配方法的参数:标签和字符串。

因此,使用此数组传递标签和字符串

答案 1 :(得分:1)

您的代码是正确的。框架代表您从对象数组中适当地转换参数。