Параметры через делегат

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Параметры через делегат

Сообщение Maitris » 16.01.2006 (Пн) 20:59

Если верить MSDN, то чтобы создать контрол из одного потока в другом, нужно объявить делегат и делать это через него...
Создал, делал .Invoke на процедуру нужного класса.
Аргументы передавал через Public переменную.. Все ок.

Потом решил что делегат то может передавать аргументы сам.
И переделал в:

Код: Выделить всё
Delegate Sub M1(ByVal Columin As Integer, ByVal Linktext As String, ByVal Linktag As String)


сигнатура самой процедуры добавления, которую нужно то собственно вызывать -

Код: Выделить всё
Private Sub ColuminsAddItem(ByVal Columin As Integer, ByVal Linktext As String, ByVal Linktag As String)


Из потока вызываю так:

Код: Выделить всё
Dim c1 As M1 = AddressOf Me.ColuminsAddItem

            Dim a(3) As Object

            a(0) = 1
            a(1) = "FirstStrArg"
            a(2) = "SecondStringArg"

            MainForm.Invoke(c1, a)


и.. чтобы вы думали? Получаю Parameter count mismatch.
Почему, ведь в ней 3 аргумента, 1 Int, 2 строковых..
Или я что-то не так понял? :batman:
----

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 16.01.2006 (Пн) 22:08

Dim a(2) As Object
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 16.01.2006 (Пн) 22:26

Sebas, мда.. Я угораю :) Спасибо. С этими индексами с нуля...
----

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.01.2006 (Вт) 6:48

И ышшо, мона без промежуточного объявления...

MainForm.Invoke(c1, new object() {1,"FirstStringArg","SecondStringArg"})
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 17.01.2006 (Вт) 21:07

GSerg а, ну да, сделал
----


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50

    TopList