Ayuda con Interop.shdocvw.......

31/01/2007 - 18:23 por NATHALY_EC | Informe spam
Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
codigo para accesar a los frames:

public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
{
// Transformer le document du Browser en IHTMLDocument2
IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
if (doc != null)
{

IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
if (windowFrame != null)
{
// Récupération of collection frames
IHTMLFramesCollection2 framescol;
framescol = windowFrame.frames;
if (framescol != null)
{
string strFrame = nomFrame;
object objName = (object)strFrame;
object obj;
obj = framescol.item(ref objName);
if (obj != null)
{
// Récupération document IHTMLDocument2 the
frame
IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
IHTMLDocument2 docFmain = windowFmain.document;
return docFmain;
}
}
}
}
return null;

}

Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:

Specified cast is not valid

Revice el objeto DOC por lo que denote que el item "frames" se ve lo
siguiente:
frames 'doc.frames' threw an exception of type
'System.InvalidCastException' mshtml.FramesCollection
{System.InvalidCastException}
Source "Microsoft.mshtml"

Message "Specified cast is not valid."
StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
TargetSite {mshtml.FramesCollection
IHTMLDocument2_get_frames()} System.Reflection.MethodBase
{System.Reflection.RuntimeMethodInfo}


porque???
Como podria arreglar esto????
Es que necesito ejecutar este proceso con hilos porque son varias paginas a
las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
se demoraria muchisimo mas, por eso lo de crear "thread".

Please heeeeeeeeeellllllllllpppppp!!!!!
:O(

Preguntas similare

Leer las respuestas

#1 carlosmsr
31/01/2007 - 20:09 | Informe spam
Verificaste que todos las clases y los métodos que estás invocando sean
Thread Safe ?

"NATHALY_EC" wrote:

Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
codigo para accesar a los frames:

public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
{
// Transformer le document du Browser en IHTMLDocument2
IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
if (doc != null)
{

IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
if (windowFrame != null)
{
// Récupération of collection frames
IHTMLFramesCollection2 framescol;
framescol = windowFrame.frames;
if (framescol != null)
{
string strFrame = nomFrame;
object objName = (object)strFrame;
object obj;
obj = framescol.item(ref objName);
if (obj != null)
{
// Récupération document IHTMLDocument2 the
frame
IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
IHTMLDocument2 docFmain = windowFmain.document;
return docFmain;
}
}
}
}
return null;

}

Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:

Specified cast is not valid

Revice el objeto DOC por lo que denote que el item "frames" se ve lo
siguiente:
frames 'doc.frames' threw an exception of type
'System.InvalidCastException' mshtml.FramesCollection
{System.InvalidCastException}
Source "Microsoft.mshtml"

Message "Specified cast is not valid."
StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
TargetSite {mshtml.FramesCollection
IHTMLDocument2_get_frames()} System.Reflection.MethodBase
{System.Reflection.RuntimeMethodInfo}


porque???
Como podria arreglar esto????
Es que necesito ejecutar este proceso con hilos porque son varias paginas a
las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
se demoraria muchisimo mas, por eso lo de crear "thread".

Please heeeeeeeeeellllllllllpppppp!!!!!
:O(
Respuesta Responder a este mensaje
#2 NATHALY_EC
31/01/2007 - 22:48 | Informe spam
Disculpame carlos la ignoracion pero a que te refieres con Thread Safe?????,
que debo verificar????

:O(


"carlosmsr" wrote:

Verificaste que todos las clases y los métodos que estás invocando sean
Thread Safe ?

"NATHALY_EC" wrote:

> Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
> es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
> codigo para accesar a los frames:
>
> public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
> {
> // Transformer le document du Browser en IHTMLDocument2
> IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
> if (doc != null)
> {
>
> IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
> if (windowFrame != null)
> {
> // Récupération of collection frames
> IHTMLFramesCollection2 framescol;
> framescol = windowFrame.frames;
> if (framescol != null)
> {
> string strFrame = nomFrame;
> object objName = (object)strFrame;
> object obj;
> obj = framescol.item(ref objName);
> if (obj != null)
> {
> // Récupération document IHTMLDocument2 the
> frame
> IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
> IHTMLDocument2 docFmain = windowFmain.document;
> return docFmain;
> }
> }
> }
> }
> return null;
>
> }
>
> Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
> en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:
>
> Specified cast is not valid
>
> Revice el objeto DOC por lo que denote que el item "frames" se ve lo
> siguiente:
> frames 'doc.frames' threw an exception of type
> 'System.InvalidCastException' mshtml.FramesCollection
> {System.InvalidCastException}
> Source "Microsoft.mshtml"
>
> Message "Specified cast is not valid."
> StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
> TargetSite {mshtml.FramesCollection
> IHTMLDocument2_get_frames()} System.Reflection.MethodBase
> {System.Reflection.RuntimeMethodInfo}
>
>
> porque???
> Como podria arreglar esto????
> Es que necesito ejecutar este proceso con hilos porque son varias paginas a
> las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
> se demoraria muchisimo mas, por eso lo de crear "thread".
>
> Please heeeeeeeeeellllllllllpppppp!!!!!
> :O(
Respuesta Responder a este mensaje
#3 carlosmsr
01/02/2007 - 19:01 | Informe spam
Fijate, por ejemplo, en la información que tienes en el overview de las
clases en MSDN. La mayoría de las veces tienens una sección que se titula
Thread Safety y te dan información sobre cómo esas clases se comportan cuando
una instancia es invocada desde distintos Threads.

Un par de pregunta: ¿ podrías decirme instancia de qué clase es el objeto
_ie ? Por lo que veo este objeto no es instanciado dentro de la función. ¿ Es
posible que distintos threads estén trabajando con una sola instancia del
browser sin intentar sincronizar las operaciones ?

¿ Has hecho un debug de la aplicación ? ¿Podrías decirme en qué línea
exáctamente se genera la excepción ?


"NATHALY_EC" wrote:

Disculpame carlos la ignoracion pero a que te refieres con Thread Safe?????,
que debo verificar????

:O(


"carlosmsr" wrote:

> Verificaste que todos las clases y los métodos que estás invocando sean
> Thread Safe ?
>
> "NATHALY_EC" wrote:
>
> > Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
> > es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
> > codigo para accesar a los frames:
> >
> > public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
> > {
> > // Transformer le document du Browser en IHTMLDocument2
> > IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
> > if (doc != null)
> > {
> >
> > IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
> > if (windowFrame != null)
> > {
> > // Récupération of collection frames
> > IHTMLFramesCollection2 framescol;
> > framescol = windowFrame.frames;
> > if (framescol != null)
> > {
> > string strFrame = nomFrame;
> > object objName = (object)strFrame;
> > object obj;
> > obj = framescol.item(ref objName);
> > if (obj != null)
> > {
> > // Récupération document IHTMLDocument2 the
> > frame
> > IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
> > IHTMLDocument2 docFmain = windowFmain.document;
> > return docFmain;
> > }
> > }
> > }
> > }
> > return null;
> >
> > }
> >
> > Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
> > en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:
> >
> > Specified cast is not valid
> >
> > Revice el objeto DOC por lo que denote que el item "frames" se ve lo
> > siguiente:
> > frames 'doc.frames' threw an exception of type
> > 'System.InvalidCastException' mshtml.FramesCollection
> > {System.InvalidCastException}
> > Source "Microsoft.mshtml"
> >
> > Message "Specified cast is not valid."
> > StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
> > TargetSite {mshtml.FramesCollection
> > IHTMLDocument2_get_frames()} System.Reflection.MethodBase
> > {System.Reflection.RuntimeMethodInfo}
> >
> >
> > porque???
> > Como podria arreglar esto????
> > Es que necesito ejecutar este proceso con hilos porque son varias paginas a
> > las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
> > se demoraria muchisimo mas, por eso lo de crear "thread".
> >
> > Please heeeeeeeeeellllllllllpppppp!!!!!
> > :O(
Respuesta Responder a este mensaje
#4 NATHALY_EC
02/02/2007 - 13:46 | Informe spam
Pues exactamente se cae en :
IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;

el objeto _ie es basicamente un objeto Internet Explorer que manejo a traves
de la dll shdocvw propia de windows.
Ahora con lo que me dices del debug si lo he hecho ademas si se crea un
browse por cada hilo...asi que pensar que compartan el objeto _ie pos no se..
no creo... no deberian..
:O(

"carlosmsr" wrote:

Fijate, por ejemplo, en la información que tienes en el overview de las
clases en MSDN. La mayoría de las veces tienens una sección que se titula
Thread Safety y te dan información sobre cómo esas clases se comportan cuando
una instancia es invocada desde distintos Threads.

Un par de pregunta: ¿ podrías decirme instancia de qué clase es el objeto
_ie ? Por lo que veo este objeto no es instanciado dentro de la función. ¿ Es
posible que distintos threads estén trabajando con una sola instancia del
browser sin intentar sincronizar las operaciones ?

¿ Has hecho un debug de la aplicación ? ¿Podrías decirme en qué línea
exáctamente se genera la excepción ?


"NATHALY_EC" wrote:

> Disculpame carlos la ignoracion pero a que te refieres con Thread Safe?????,
> que debo verificar????
>
> :O(
>
>
> "carlosmsr" wrote:
>
> > Verificaste que todos las clases y los métodos que estás invocando sean
> > Thread Safe ?
> >
> > "NATHALY_EC" wrote:
> >
> > > Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
> > > es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
> > > codigo para accesar a los frames:
> > >
> > > public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
> > > {
> > > // Transformer le document du Browser en IHTMLDocument2
> > > IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
> > > if (doc != null)
> > > {
> > >
> > > IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
> > > if (windowFrame != null)
> > > {
> > > // Récupération of collection frames
> > > IHTMLFramesCollection2 framescol;
> > > framescol = windowFrame.frames;
> > > if (framescol != null)
> > > {
> > > string strFrame = nomFrame;
> > > object objName = (object)strFrame;
> > > object obj;
> > > obj = framescol.item(ref objName);
> > > if (obj != null)
> > > {
> > > // Récupération document IHTMLDocument2 the
> > > frame
> > > IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
> > > IHTMLDocument2 docFmain = windowFmain.document;
> > > return docFmain;
> > > }
> > > }
> > > }
> > > }
> > > return null;
> > >
> > > }
> > >
> > > Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
> > > en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:
> > >
> > > Specified cast is not valid
> > >
> > > Revice el objeto DOC por lo que denote que el item "frames" se ve lo
> > > siguiente:
> > > frames 'doc.frames' threw an exception of type
> > > 'System.InvalidCastException' mshtml.FramesCollection
> > > {System.InvalidCastException}
> > > Source "Microsoft.mshtml"
> > >
> > > Message "Specified cast is not valid."
> > > StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
> > > TargetSite {mshtml.FramesCollection
> > > IHTMLDocument2_get_frames()} System.Reflection.MethodBase
> > > {System.Reflection.RuntimeMethodInfo}
> > >
> > >
> > > porque???
> > > Como podria arreglar esto????
> > > Es que necesito ejecutar este proceso con hilos porque son varias paginas a
> > > las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
> > > se demoraria muchisimo mas, por eso lo de crear "thread".
> > >
> > > Please heeeeeeeeeellllllllllpppppp!!!!!
> > > :O(
Respuesta Responder a este mensaje
#5 carlosmsr
02/02/2007 - 14:14 | Informe spam
Creo que vas a encontrar alguna informacion util en el siguiente post. Sobre
todo en segundo link del post numero 6.

http://www.dotnetforums.net/t81341.html

Es un problema ya conocido. Parece que la solucion es utilizar el ie desde
el Thread principal.

Por las dudas aqui te copio los links.

http://lab.msdn.microsoft.com/Produ...orkarounds

http://blogs.msdn.com/jfoscoding/ar...06341.aspx

El workaround propuesto por Microsoft no lo pude encontrar. Pero te
agradeceria que, si lo encontras, lo publiqueas aqui.

Saludos y cuentanos como te fue.


"NATHALY_EC" wrote:

Pues exactamente se cae en :
IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;

el objeto _ie es basicamente un objeto Internet Explorer que manejo a traves
de la dll shdocvw propia de windows.
Ahora con lo que me dices del debug si lo he hecho ademas si se crea un
browse por cada hilo...asi que pensar que compartan el objeto _ie pos no se..
no creo... no deberian..
:O(

"carlosmsr" wrote:

> Fijate, por ejemplo, en la información que tienes en el overview de las
> clases en MSDN. La mayoría de las veces tienens una sección que se titula
> Thread Safety y te dan información sobre cómo esas clases se comportan cuando
> una instancia es invocada desde distintos Threads.
>
> Un par de pregunta: ¿ podrías decirme instancia de qué clase es el objeto
> _ie ? Por lo que veo este objeto no es instanciado dentro de la función. ¿ Es
> posible que distintos threads estén trabajando con una sola instancia del
> browser sin intentar sincronizar las operaciones ?
>
> ¿ Has hecho un debug de la aplicación ? ¿Podrías decirme en qué línea
> exáctamente se genera la excepción ?
>
>
> "NATHALY_EC" wrote:
>
> > Disculpame carlos la ignoracion pero a que te refieres con Thread Safe?????,
> > que debo verificar????
> >
> > :O(
> >
> >
> > "carlosmsr" wrote:
> >
> > > Verificaste que todos las clases y los métodos que estás invocando sean
> > > Thread Safe ?
> > >
> > > "NATHALY_EC" wrote:
> > >
> > > > Hola amigostengo una aplicacion que navega a paginas HTML , mi problema
> > > > es que debo de accesar a los frames de dichas paginas, yo tengo el siguiente
> > > > codigo para accesar a los frames:
> > > >
> > > > public IHTMLDocument2 recupererDocumentFrame(string nomFrame)
> > > > {
> > > > // Transformer le document du Browser en IHTMLDocument2
> > > > IHTMLDocument2 doc = (IHTMLDocument2)_ie.Document;
> > > > if (doc != null)
> > > > {
> > > >
> > > > IHTMLWindow2 windowFrame = (IHTMLWindow2)doc.frames;
> > > > if (windowFrame != null)
> > > > {
> > > > // Récupération of collection frames
> > > > IHTMLFramesCollection2 framescol;
> > > > framescol = windowFrame.frames;
> > > > if (framescol != null)
> > > > {
> > > > string strFrame = nomFrame;
> > > > object objName = (object)strFrame;
> > > > object obj;
> > > > obj = framescol.item(ref objName);
> > > > if (obj != null)
> > > > {
> > > > // Récupération document IHTMLDocument2 the
> > > > frame
> > > > IHTMLWindow2 windowFmain = (IHTMLWindow2)obj;
> > > > IHTMLDocument2 docFmain = windowFmain.document;
> > > > return docFmain;
> > > > }
> > > > }
> > > > }
> > > > }
> > > > return null;
> > > >
> > > > }
> > > >
> > > > Si executo este codigo en mi aplicacion funciona muy bien pero si lo coloco
> > > > en un hilo que mi aplicacion dispare me aparece el siguiente mensaje de error:
> > > >
> > > > Specified cast is not valid
> > > >
> > > > Revice el objeto DOC por lo que denote que el item "frames" se ve lo
> > > > siguiente:
> > > > frames 'doc.frames' threw an exception of type
> > > > 'System.InvalidCastException' mshtml.FramesCollection
> > > > {System.InvalidCastException}
> > > > Source "Microsoft.mshtml"
> > > >
> > > > Message "Specified cast is not valid."
> > > > StackTrace " at mshtml.HTMLDocumentClass.IHTMLDocument2_get_frames()"
> > > > TargetSite {mshtml.FramesCollection
> > > > IHTMLDocument2_get_frames()} System.Reflection.MethodBase
> > > > {System.Reflection.RuntimeMethodInfo}
> > > >
> > > >
> > > > porque???
> > > > Como podria arreglar esto????
> > > > Es que necesito ejecutar este proceso con hilos porque son varias paginas a
> > > > las que debo accesar, ya por si demora su acceso si hago esto secuencialmente
> > > > se demoraria muchisimo mas, por eso lo de crear "thread".
> > > >
> > > > Please heeeeeeeeeellllllllllpppppp!!!!!
> > > > :O(
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida