Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Lopardo en 22 Febrero 2011, 05:33 am



Título: Concurrencia sobre dll externa
Publicado por: Lopardo en 22 Febrero 2011, 05:33 am
Hola a todos,

Les explico lo que quiero hacer, estoy tratando de modificar el comportamiento de una aplicación para que ésta realice sus funciones de forma concurrente. Esta aplicación sirve para programar soluciones híbridas donde se combina la programación web con la programación de aplicaciones de escritorio, es como una especie de navegador web, que permite que programen sus funciones básicas.

Les explico un poco su funcionamiento para que puedan ayudarme en lo que quiero hacer. Esta aplicación esta compuesta de un WebBrowser en el cual se muestra la solución que se desarrolle, su comportamiento es similar al de un sitio web, hasta el momento que esta se comunica con código de vb.net, c#, etc. por ejemplo, si se presiona en un botón y éste llama a una función desarrollada en vb.net, no se puede presionar en otro enlace de la web porque el hilo principal esta ocupado, entonces, para evitar esto lo que hice fue que al pisar en algún botón, se crea un nuevo hilo para que este se encargue de realizar la tarea, todo funciona muy bien, sin embargo, cuando empleo las funciones que trae la aplicación para crear gráficas, me permite hacerlo varias veces y después no funciona correctamente. Lo que he pensado es que tal vez los controles empleados para crear las gráficas fueron inicializados por el hilo principal y cuando se intentan utilizar por otros hilos da problema, lo extraño es que funciona 100% si se ejecuta con el hilo principal de la aplicación, cosa que no quiero hacer porque la creación de estas gráficas dura cierto tiempo y todo quedaría en espera que se libere el hilo.

No se si exista alguna manera para ejecutar funciones almacenadas en dll y que ésta piense de alguna manera que el hilo que la este ejecutando fue el mismo que la inicializó.  O dividir el hilo principal en sub procesos para que realicen tareas diversas concurrentemente.

Bueno cualquier idea es bienvenida, gracias por su ayuda.


Título: Re: Concurrencia sobre dll externa
Publicado por: raul338 en 22 Febrero 2011, 13:49 pm
Estas hablando de que el programa usa funciones hechas en vb.net, C# e hilos... no es comun encontrar esto en vb.

El programa esta hecho en .net (sea vb.net, C#, etc)? Entonces este hilo va Suboro de .net (http://foro.elhacker.net/net-b62.0/)

Si fuera el caso, los hilos, como los creas y les pasas los valores? Yo usaria un BackGroundWorker o crearia un AsynCallback para que cree un thread automaticamente y lo termine.


Título: Re: Concurrencia sobre dll externa
Publicado por: Lopardo en 27 Febrero 2011, 07:09 am
Es correcto, el programa permite programar funciones en cualquiera de los lenguajes de .net.

Este está programado en .net, los hilos los he creado de varias formas, usando BackGroundWorker, creando unas instancia de Thread, incluso usando timer, el problema de este último es que sería el mismo hilo principal y por lo tanto si se ocupa en cualquiera de los timer se tendría que esperar que finalice, y es exactamente lo que no quiero que ocurra.

Lo que creo que solucionaría mi el asunto es que el hilo principal sea el que ejecute ciertas funciones que están en las dll y no sea otro hilo. Por eso pregunto si existirá alguna forma de hacer que el hilo principal realice varios procesos al mismo tiempo, simulando la concurrencia, o que un nuevo hilo simule al hilo principal, permitiendo de esta manera hacer uso de los controles creados cuando se inicializaron los objetos de las dll.

Cualquier comentario es útil. gracias por su ayuda.


Título: Re: Concurrencia sobre dll externa
Publicado por: BlackZeroX en 27 Febrero 2011, 10:16 am
.
¡Si es el error que pienso que es, entonces usa Delagados para escalar entre hilos y asi acceder a las referencias de los controles... ya que es un problema comun querer acceder de un proceso en un hilo a otro para acceder a un objeto X.!

Dulces Lunas!¡.


Título: Re: Concurrencia sobre dll externa
Publicado por: [D4N93R] en 27 Febrero 2011, 15:50 pm
Si tienes subprocesos y quieren modificar algo del UI , no podrás hacerlo directamente. Sino que como dijo BlackZeroX, tienes que usar delegados, los cuales tienes que pasárselos al un método Invoke del formulario, o implementar tú mismo algo parecido.

Un saludo!