Parámetros en array de objetos con método invoke
Hola, soy nuevo en este site, es la primera pregunta que realizo, espero dejarme entender y desde ya muchas gracias por la ayuda que puedas brindarme.
El problema que tengo es el siguiente. Te lo expicare con código, creo que es más entendible
Public Class clsPrueba
Public Delegate Sub SubDelegado(ByVal Args() As Object)
Public _objeto As ISynchronizeInvoke
Public _delegado As SubDelegado
Public Sub Datos(ByVal Objeto As ISynchronizeInvoke, ByVal delegado As SubDelegado)
_objeto = Objeto
_delegado = delegado
End Sub
Public Sub Iniciar()
'Procesos
Dim lista As New Generic.List(Of dto.Documento)
lista = LlenarDocumentos()
Dim Args() As Object = New Object() {lista}
Objeto.Invoke(delegado, Args)
End Sub
End Class
En el Formulario
Public Sub Prueba()
Dim oclsPrueba As clsPruba
Dim t As New Threading.Thread(AddressOf oclsPrueba.Iniciar)
oclsPrueba.datos(form1, AddressOf elSubDelegado)
t.Start()
End Sub
Public Sub elSubDelegado(ByVal Args() As Object)
Dim Lista As Generic.List(Of dto.Documento) = DirectCast(Args(0), Generic.List(Of dto.Documento))
End Sub
Entonces, yo llabo al Sub Prueba, todo el proceso se realiza correctamente, lo que esté en el otro hilo también. El problema aparece cuando el procedimiento "Iniciar", llega a la linea "Objeto.Invoke(delegado, Args)"... El mensaje del error devuelto por visual dice:
System.ArgumentException was unhandled
Message="Object of type 'System.Collections.Generic.List`1[ds.dto.Documento]' cannot be converted to type 'System.Object[]'."
Si pruebo pasando cualquier otro tipo de objeto no hay problema, si especifico como uno de los parámetros del delegado la lista genérica y la meto al array de objetos tampoco me da problemas, pero no quiero hacer esto porque mi intención es hacer un proceso muy genérico que pueda devolver cualquier lista de objetos u otro tipo de objetos, creí que como todos los objetos derivan de la clase Object no debería tener problemas.
Bueno, Espero puedas ayudarme con mi problema. Gracias.
El problema que tengo es el siguiente. Te lo expicare con código, creo que es más entendible
Public Class clsPrueba
Public Delegate Sub SubDelegado(ByVal Args() As Object)
Public _objeto As ISynchronizeInvoke
Public _delegado As SubDelegado
Public Sub Datos(ByVal Objeto As ISynchronizeInvoke, ByVal delegado As SubDelegado)
_objeto = Objeto
_delegado = delegado
End Sub
Public Sub Iniciar()
'Procesos
Dim lista As New Generic.List(Of dto.Documento)
lista = LlenarDocumentos()
Dim Args() As Object = New Object() {lista}
Objeto.Invoke(delegado, Args)
End Sub
End Class
En el Formulario
Public Sub Prueba()
Dim oclsPrueba As clsPruba
Dim t As New Threading.Thread(AddressOf oclsPrueba.Iniciar)
oclsPrueba.datos(form1, AddressOf elSubDelegado)
t.Start()
End Sub
Public Sub elSubDelegado(ByVal Args() As Object)
Dim Lista As Generic.List(Of dto.Documento) = DirectCast(Args(0), Generic.List(Of dto.Documento))
End Sub
Entonces, yo llabo al Sub Prueba, todo el proceso se realiza correctamente, lo que esté en el otro hilo también. El problema aparece cuando el procedimiento "Iniciar", llega a la linea "Objeto.Invoke(delegado, Args)"... El mensaje del error devuelto por visual dice:
System.ArgumentException was unhandled
Message="Object of type 'System.Collections.Generic.List`1[ds.dto.Documento]' cannot be converted to type 'System.Object[]'."
Si pruebo pasando cualquier otro tipo de objeto no hay problema, si especifico como uno de los parámetros del delegado la lista genérica y la meto al array de objetos tampoco me da problemas, pero no quiero hacer esto porque mi intención es hacer un proceso muy genérico que pueda devolver cualquier lista de objetos u otro tipo de objetos, creí que como todos los objetos derivan de la clase Object no debería tener problemas.
Bueno, Espero puedas ayudarme con mi problema. Gracias.
Respuesta de Roberto Alvarado
1