Threads con COM

10/07/2006 - 08:52 por Juan Cuello | Informe spam
Hola a todos.

Tengo una cuestión que preguntar:

Resulta que no tengo ningún problema en ejecutar una función de .NET en un
thread secundario. El problema está en que, si esa función ejecuta algún
método de una DLL COM (desgraciadamente tengo que usarla) me salta una
excepción diciéndome algo de interfaces COM.

¿Alguien sabe como ejecutar una función de COM en un hilo secundario sin que
falle?


Gracias y un sALUDO
AP Software Development

Preguntas similare

Leer las respuestas

#6 Jesús López
14/07/2006 - 18:37 | Informe spam
Precisamente los problemas que he tenido con COM y los hilos ha sido
justamente por el tipo de apartamento. A mi lo que me pasaba es que la
aplicación parecía que se quedaba colgada y se solucionó usando apartamentos
MTA, pero por lo visto a ti lo que te conviene son los apartamentos STA.

El tipo de apartamento puede establecerse a nivel de aplicación decorando el
método main con el atributo MTAThreadAttribute o STAThreadAtribute

Saludos:

Jesús

"Juan Cuello" escribió en el mensaje
news:
Hola,

He encontrado más a fondo la raíz del problema pero no la solución:

Resulta que he intentado realizar la ejecución con un thread normal
indicando que:

tt.SetApartmentState(Threading.ApartmentState.STA)

Y me ha permitido ejecutar. Si le pongo el apartment por defecto no me
deja
y me da el error comentado.

Ahora la cuestión es cómo puedo establecer algo parecido en la ejecución
asíncrona:

Dim AsyncImport As New AsyncCallImportBC3(AddressOf
ProcesarImportacionBC3)

AsyncImport.BeginInvoke(New AsyncCallback(AddressOf
ProcesarImportacionBC3CallBack), AsyncImport)

Algo así solucionaría le problema seguramente.

Saludos y gracias
AP Software Development



"Jesús López" escribió:

Pero ese error no parece tener nada que ver con los hilos, sino con la
conversión de tipos.

Por el mensaje de error parece que estás haciendo algo como:

Dim Obj As New FIEGENATLLib.FieGenBc3Class

Dim IObj As FIEGENATLLib.IFieGenBc3

IObj = Obj

Y debido a que la clase FieGenBc3Class no implementa el interfaz
IFieGenBc3
se produce el error de conversión de tipos


Saludos:

Jesús López
MVP VB
Solid Quality Learning
www.solidqualitylearning.com



"Juan Cuello" escribió:

> Hola,
>
> Era una pregunta preliminar para saber si directamente no se puede.
> Antes
> probé con lanzar un thread pero ahora lo hago con llamada asíncrona.
>
> Al ejecutar una función de la DLL COM me sale este error:
>
> No se puede convertir el objeto COM del tipo
> 'FIEGENATLLib.FieGenBc3Class'
> al tipo de interfaz 'FIEGENATLLib.IFieGenBc3'. Ocurrió un error de
> operación
> debido a que la llamada QueryInterface en el componente COM para la
> interfaz
> con IID '{613534A2-E931-4D21-9590-844973801798}' generó el siguiente
> error:
> Interfaz no compatible (Excepción de HRESULT: 0x80004002
> (E_NOINTERFACE)).
>
> He comprobado que la referencia a la DLL sea correcta y he vuelto a
> generar
> el Interop pero nada...
>
> Gracias de antemano
>
>
>
> AP Software Development
>
>
>
> "Jesús López" escribió:
>
> > ¿Podrías ser más explícito? ¿Cual es exáctamente el mensaje de
> > error?.
> > Seguramente el mensaje de error nos dará una pista para poder
> > determinar el
> > problema y ayudarte. Yo he llamado a objetos COM en hilos y he tenido
> > algunos problemas que solucioné, pero no recibí ningún tipo de
> > excepción.
> >
> > Saludos:
> >
> > Jesús
> >
> >
> > "Juan Cuello" escribió en el
> > mensaje
> > news:
> > > Hola a todos.
> > >
> > > Tengo una cuestión que preguntar:
> > >
> > > Resulta que no tengo ningún problema en ejecutar una función de
> > > .NET en un
> > > thread secundario. El problema está en que, si esa función ejecuta
> > > algún
> > > método de una DLL COM (desgraciadamente tengo que usarla) me salta
> > > una
> > > excepción diciéndome algo de interfaces COM.
> > >
> > > ¿Alguien sabe como ejecutar una función de COM en un hilo
> > > secundario sin
> > > que
> > > falle?
> > >
> > >
> > > Gracias y un sALUDO
> > > AP Software Development
> > >
> >
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida