Foros del Web » Programación para mayores de 30 ;) » .NET »

problema con hilos de ejecución

Estas en el tema de problema con hilos de ejecución en el foro de .NET en Foros del Web. Hola. tengo una pega con hilos de ejecución. Me explico. Tengo un formulario, que una de las muchas opciones es abrir otro para cargar todos ...
  #1 (permalink)  
Antiguo 27/08/2010, 11:50
 
Fecha de Ingreso: abril-2009
Mensajes: 160
Antigüedad: 15 años
Puntos: 3
Pregunta problema con hilos de ejecución

Hola. tengo una pega con hilos de ejecución.
Me explico.
Tengo un formulario, que una de las muchas opciones es abrir otro para cargar todos los usuarios de un dominio windows 2003 y ver su estado (habilitado o no).

En el 2 formulario con hilo intento realizar el proceso....

Código:
hilo = New Threading.Thread(AddressOf cargar_usuarios_administradores) ' lanzamos hilo de ejecución
        hilo.Start()
intento cargar los datos, en "cargar_usuarios_administradores" se llama a una función que está en el primer 1 y devuelve un arraylist con los datos.

Pues no hay manera,

si llamo directamente a "cargar_usuarios_administradores" si lo hace bien, pero claro, no se puede detener el proceso, si fuese con un hilo si.

Supongo que tendrá que ver algo del tema de los delegados pero no se como.

como sería el tema de los delegados, un ejemplo sencillo para entenderlo

ahhhh, una cosa

en otros formulario se llama funciones del mismo modo, reciben parámetros, devuelven un arraylist y no da pegas al ser llamas desde un hilo de ejecución.
Pero esta si, y es lo mismo, no se modifica nada desde la función, solo llenar el arraylist con los datos

os paso la función que no se deja llamar desde un hilo desde un formulario distinto desde donde esta

Cita:
Public Function administradores_delegados(ByVal unidad As String, ByVal controlador As String)
Try
Dim cadena As String = "LDAP://" & controlador & "/" & unidad & "," & dominio
Dim ad1 As New DirectoryEntry(cadena)
Dim buscar As New DirectorySearcher(ad1)
buscar.PageSize = 2500
buscar.Filter = "(&(objectClass=user)(objectClass=person))"
Dim ad2 As DirectoryEntry
Dim listado As ArrayList = New ArrayList
For Each elemento As SearchResult In buscar.FindAll
Try
ad2 = elemento.GetDirectoryEntry
listado.Add(ad2.Properties("name").Value & "*" & ad2.NativeObject.AccountExpirationDate() & "*" & ad2.Properties("Description").Value)
Catch ex As Exception

End Try
Next
Return listado
Catch ex As Exception
Return False
End Try
End Function
muchas gracias

Última edición por javi37; 27/08/2010 a las 12:24
  #2 (permalink)  
Antiguo 27/08/2010, 12:28
Avatar de xjuanch0x  
Fecha de Ingreso: septiembre-2009
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: problema con hilos de ejecución

Coloca tu función para ver su estructura porque con lo que colocas no es suficiente, en caso dado que no puedas, la lista que devuelve guárdala temporalmente en otra lista y así la puedes usar dentro de la clase que llama al Hilo
__________________
Juan David Torres Vasquez
[email protected]
Microsoft Certified Technology Specialist (MCTS)
DCE Platinum en Visual C# y VB.NET
  #3 (permalink)  
Antiguo 27/08/2010, 12:33
 
Fecha de Ingreso: julio-2009
Mensajes: 82
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: problema con hilos de ejecución

Buenas,

no entiendo muy bien quieres hacer...

por lo que puedo entender tienes el hilo principal de la aplicación en el Form1. Luego, en el Form2 lanzas otro hilo que recoge los datos de los usuarios, pero para ello tienes que acceder al Form1, ¿es correcto?

Ahora te explicaré de manera sencilla los delegados:

imagina que en el Form1 tienes una Label llamada LabelNombreUsuario, que quieres establecer desde el Form2.

Si realizas lo siguiente desde el Form2 :
Código:
Form1.LabelNombreUsuario.Text = "Pepito";
se lanzará una Excepción que te indica que no puedes acceder a esa label desde Form2, ya que solo se puede acceder a ese elemento desde Form1, que es quien lo crea.

¿Cómo accedemos entonces al Label? --> Empleando Delegados

En el Form1 creamos el delegado:

Código:
private delegate void SetLabelTextDelegate(string text);
y la función que nos permitirá modificar la Label:

Código:
public void SetLabelText(string text)
{
    if(!InvokeRequired)
    {
        LabelNombreUsuario.Text = text;
    } 
    else 
        Invoke(new SetLabelTextDelegate(SetLabelText),new object[] {text}); 
}
ahora, en el Form2, deberemos modificar

Código:
Form1.LabelNombreUsuario.Text = "Pepito";
por lo siguiente:

Código:
Form1.SetLabelText("Pepito");
y ya funcionaría.

Más info en este enlace

Espero que te sirva.
  #4 (permalink)  
Antiguo 27/08/2010, 12:34
 
Fecha de Ingreso: abril-2009
Mensajes: 160
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con hilos de ejecución

Esa es la función que está en el formulario1, esa función es llamada desde formulario2 mediante un hilo, y ya está nada mas. Sin hilos correo, con hilos no corre, el problema es que carga mas de 1700 usuarios, con lo que no se puede dejar sin un hilo.

Otras funciones, funcionan perfectamente, son llamas desde formulariox, están en formulario1, devuelven un arraylist, y sin pegas con el hilo, pero esta¿?, no se porque

Por todo esto no creo que tenga que ver con los delegados y demás, las funciones que son llamadas desde formulario2 y están en formulario1 no modifican nada, solo devuelven un arraylist
  #5 (permalink)  
Antiguo 28/08/2010, 12:06
 
Fecha de Ingreso: abril-2009
Mensajes: 160
Antigüedad: 15 años
Puntos: 3
Respuesta: problema con hilos de ejecución

Al final lo que hice fue meter las funciones en una dll, y desde los distintos formularios instanciarlas y listo,

un saludo

Etiquetas: hilos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:45.