Попытка понять Control.BeginInvoke код в MSDN - PullRequest
0 голосов
/ 09 июня 2011

Я имею в виду этот документ на MSDN.Я понимаю, что делает ".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,Управление меткой передается и массив ...

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

и в "DelegateMethod" есть

 myControl.Text = myCaption

Разве строка не должна быть передана вместо массива?Я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

BeginInvoke может принимать два параметра. Один из них является делегатом, в данном случае AddressOf DelegateMethod.

Другой параметр - это массив параметров. DelegateMethod принимает два параметра: метку и строку. Чтобы передать их с помощью begininvoke, массив объектов с двумя членами передается invokevoke для соответствия параметрам метода: метке и строке.

Таким образом, и метка, и строка передаются с использованием этого массива

1 голос
/ 09 июня 2011

Ваш код правильный.Фреймворк соответствующим образом выводит параметры из массива объектов от вашего имени.

...