Autor
|
Tema: Encpsular Objeto para ejecutar por hilo principal (Leído 5,603 veces)
|
Lopardo
Desconectado
Mensajes: 119
Solo es el principio...
|
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.
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
.... 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 )
|
|
|
En línea
|
|
|
|
Lopardo
Desconectado
Mensajes: 119
Solo es el principio...
|
Hola raul338, a que propiedad te refieres?
Gracias
|
|
|
En línea
|
...de la sabiduría.
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
CheckForIllegalCrossThreadCalls, pero es un arma de doble filo Fuente
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
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
|
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
Mensajes: 119
Solo es el principio...
|
[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.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como hacer que se cree un objeto a traves de otro objeto (¿se puede?)
« 1 2 »
.NET (C#, VB.NET, ASP)
|
Sin Nick xD
|
10
|
9,476
|
22 Marzo 2008, 06:18 am
por Sin Nick xD
|
|
|
[Python]Problema al ejecutar metodo principal
Scripting
|
Debci
|
3
|
5,907
|
10 Septiembre 2010, 17:15 pm
por Debci
|
|
|
Crear precarga independiente del hilo principal.
.NET (C#, VB.NET, ASP)
|
Lopardo
|
0
|
3,074
|
14 Junio 2011, 16:18 pm
por Lopardo
|
|
|
Como ejecutar un hilo despues de mostrar una ventana en WINAPI
Programación C/C++
|
linkcode
|
0
|
1,620
|
5 Junio 2015, 21:00 pm
por linkcode
|
|
|
Ejecutar métodos de un objeto en otros
Programación C/C++
|
maurus
|
8
|
4,490
|
3 Marzo 2023, 01:52 am
por maurus
|
|