Threads y Windows.foms

05/04/2005 - 13:53 por Black_angel | Informe spam
Hola a todos,

estoy desarrollando una aplicación que utiliza varios Threads.
Tiene un formulario cuyas variables tienen que ser modificados por algunos
Threads:

public class IU_Principal
{
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.MainMenu mainMenu1;


public void Anadir(string nombre)
{

System.Windows.Forms.TreeNode tn=
this.treeView1.Nodes[1].Nodes.Add(nombre);

}
}

La función Añadir añade el nombre que se le pasa como parámetro al TreeView.
Esta función es llamada por un Thread que hace lo siguiente:
Hay una clase "GestorCliente" que tiene entre sus variables la interfaz
principal:
class GestorCliente
{
private IU_Principal interfazform;


public void AnadirDesdeThread(string nombre)
{
//Llama al método "Añadir" del formulario principal
interfazform.Anadir(nombre);
//Añade el nombre en otra lista a parte... (esto no tiene importancia)
lista.Add(nombre);
}
}

El Thread lo que hace es escuchar mensajes y los tiene que añadir al
TreeView del formulario:
public void ProcedimientoDelThread()
{
string mensaje;
while(true)
{
//Recibimos mensajes que se quedarán en la variable "mensaje"
...
//Una vez tengamos el mensaje lo tenemos que añadir al formulario
//para eso llamamos al gestor, cuya variable tenemos y se llama "ges"
ges.AñadirDesdeThread(mensaje);
}
}


Al intentar asignar valores al TreeView nos devuelve un error que nos dice
que estamos utilizando un proceso no adecuado, que utilicemos BeginInvoke.
He mirado por Internet acerca de BeginInvoke y la utilización de delegados
pero no entiendo muy bien su funcionamiento ni en qué clase tendría que
declararlos y llamarlos.

Si alguien sabe acerca del tema le estaría muy agradecido por responder.
Un saludo a todos y gracias de antemano.

Black_angel.
 

Leer las respuestas

#1 Anonimo
05/04/2005 - 21:08 | Informe spam
Puedes realizar mayor aportación de código ?


Hola a todos,

estoy desarrollando una aplicación que utiliza varios


Threads.
Tiene un formulario cuyas variables tienen que ser


modificados por algunos
Threads:

public class IU_Principal
{
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.MainMenu mainMenu1;


public void Anadir(string nombre)
{

System.Windows.Forms.TreeNode tn=
this.treeView1.Nodes[1].Nodes.Add(nombre);

}
}

La función Aà±adir aà±ade el nombre que se le pasa como


parà¡metro al TreeView.
Esta función es llamada por un Thread que hace lo


siguiente:
Hay una clase "GestorCliente" que tiene entre sus


variables la interfaz
principal:
class GestorCliente
{
private IU_Principal interfazform;
.
.
public void AnadirDesdeThread(string nombre)
{
//Llama al método "Aà±adir" del formulario


principal
interfazform.Anadir(nombre);
//Aà±ade el nombre en otra lista a parte... (esto no


tiene importancia)
lista.Add(nombre);
}
}

El Thread lo que hace es escuchar mensajes y los tiene


que aà±adir al
TreeView del formulario:
public void ProcedimientoDelThread()
{
string mensaje;
while(true)
{
//Recibimos mensajes que se quedarà¡n en la


variable "mensaje"
...
//Una vez tengamos el mensaje lo tenemos que


aà±adir al formulario
//para eso llamamos al gestor, cuya variable


tenemos y se llama "ges"
ges.Aà±adirDesdeThread(mensaje);
}
}


Al intentar asignar valores al TreeView nos devuelve un


error que nos dice
que estamos utilizando un proceso no adecuado, que


utilicemos BeginInvoke.
He mirado por Internet acerca de BeginInvoke y la


utilización de delegados
pero no entiendo muy bien su funcionamiento ni en qué


clase tendrà­a que
declararlos y llamarlos.

Si alguien sabe acerca del tema le estarà­a muy agradecido


por responder.
Un saludo a todos y gracias de antemano.

Black_angel.

.

Preguntas similares