elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Encpsular Objeto para ejecutar por hilo principal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encpsular Objeto para ejecutar por hilo principal  (Leído 5,656 veces)
Lopardo

Desconectado Desconectado

Mensajes: 119


Solo es el principio...


Ver Perfil WWW
Encpsular Objeto para ejecutar por hilo principal
« en: 21 Mayo 2011, 18:15 pm »

hola a todos, el problema que tengo es el siguiente,  tengo una función (funcion1) que recibe varios parámetros entre ellos un WebBrowser (wb), y quiero que la tarea que vaya a realizar esta función sea en paralelo, entonces, creo un nuevo hilo (hilo2) para ese objetivo, el problema viene cuando hilo2 intenta utilizar el wb, estoy seguro que la razón de ésto es porque el wb es un objeto creado por el hilo principal (hilo1) y no puede ser utilizado por hilos hijos (algo que no permite vb.net), entonces, lo que quiero hacer es encapsular el wb en un objeto de tal forma que cuando el hilo2 intente acceder a éste, se invoque al hilo1 para que éste se encargue de gestionar la tarea.

Una solución es que cada vez que vaya a utilizar el wb invoque a un delegado y realice la tarea con el wb por medio del hilo1, pero entonces, en cada lugar donde quiera utilizar el wb debería invocar al delegado.. esta solución la he probado y funciona correctamente, el asunto está en que no es factible, debido a que las funciones que utilizan el wb ya existen y son muchas y gran cantidad de esta son privadas y no tengo acceso a su código fuente, por eso he pensado en encapsular el wb dentro de otro objeto para que cuando se quiera acceder a este se ejecute el delegado que les menciono y éste se encargue de acceder a las propiedades que se estén requiriendo.

También he pensado que si pudiera sobreescribir todos los métodos de la clase WebBrowser y en el objeto wb cada vez que se intente acceder a algún método o campo lo hiciera a través de estos métodos sobreescritos, entonces, por medio del delegado llamaría a los métodos originales, el asunto está en que el objeto wb tiene una infinidad de métodos y como haría esto de forma dinámica.. esto es otra idea pero no se si sea factible.

Si tienen alguna otra idea sería bueno conocerlas.. gracias por su ayuda.

Saludos


En línea

...de la sabiduría.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #1 en: 21 Mayo 2011, 18:43 pm »

emmm  podrias poner tu code para guiar mejor  :P


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #2 en: 21 Mayo 2011, 19:09 pm »

.... no puede ser utilizado por hilos hijos (algo que no permite vb.net)

Ahi ya empezamos mal (?). Te lo muevo a programacion .net

Lo de los delegados es una forma, o seria crearlo por el hilo Padre y que ambos accedan, o bien desactivar una propiedad para permitir el libre albedrio entre threads (ultimo recurso :xD)
En línea

Lopardo

Desconectado Desconectado

Mensajes: 119


Solo es el principio...


Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #3 en: 21 Mayo 2011, 20:40 pm »

Hola raul338, a que propiedad te refieres?

Gracias
En línea

...de la sabiduría.
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #4 en: 21 Mayo 2011, 20:50 pm »

CheckForIllegalCrossThreadCalls, pero es un arma de doble filo ;)

Fuente
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #5 en: 22 Mayo 2011, 19:49 pm »

Entiendo tu planteamiento, pero no entiendo tu pregunta. Qué ganas encapsulando el WB? El dispatch? Nunca podrás crear el WB en otro hilo sin que te salga la excepción (olvidate de CheckForIllegalCrossThreadCalls xD) porque todo lo que requiera de "pintado de controles" necesita ejecutarse en el hijo principal.

No entiendo eso de que métodos privados y tal, si son privados no vas a poder acceder a ellos :S

Replantea la pregunta, sin explicar el escenario porque ya lo tengo claro.. :)
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #6 en: 22 Mayo 2011, 20:08 pm »

busca en un proyecto que publique hace poco de un buscador de mercadolibre, ahi yo uso un thread y para que no salte ese error uso la solucion mas comun que es Invoke, buscalo y fijate.igual en internet tenes varias soluciones para solucionar el tema de los controles en un thread.

saludos.
En línea

Lopardo

Desconectado Desconectado

Mensajes: 119


Solo es el principio...


Ver Perfil WWW
Re: Encpsular Objeto para ejecutar por hilo principal
« Respuesta #7 en: 23 Mayo 2011, 02:53 am »

[D4N93R],

te explico porque encapsular el WB, lo que pasa es que si le paso el wb a las funciones que lo utilizan va a dar error porque acceden usando el hilo en cuestión, ahora bien, si lo encapsulo podría hacer que cada vez se quiera acceder a un propiedad del wb lo haga mediante un delegado del hilo principal..

Ya logré encapsular el wb usando Dynamic Object lo malo es que se necesita .Net Framework 4.0 y que el objeto ya no sería de tipo WebBrowser, si no, de la clase donde lo encapsulé.. y al pasarlo a funciones que reciban específicamente un wb me va a dar error, no se me ha ocurrido una forma de hacerlo parecer ahora un wb, ya sea haciendo que implemente algunas interfaces o no se... si se les ocurre algo.. o una mejor manera de hacerlo sería bueno que compartieran la info..

seba123neo ,
entiendo lo que dices, el asunto está en que no puedo modificar las funciones que usan el wb para decirle que cada vez que lo vayan a usar empleen un delegado, por eso viene lo de modificar el wb.

Saludos. Gracias por su ayuda.
En línea

...de la sabiduría.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines