Threads

15/04/2005 - 12:32 por Víctor | Informe spam
Hola a todos,

estoy haciendo una aplicación en la que simular un escritorio de Windows
(por diversos motivos no puedo utilizar el escritorio por defecto). Para
crear los botones de las aplicaciones abiertas en la barra de tareas utilizo
System.Diagnostics.Process.GetProcesses() e introduzco aquellos procesos con
MainWindowHandle diferente de IntPtr.Zero, que utilizan ventana, en una
colección de procesos. El problema es, que GetProcesses() produce un
retardo, por lo que había pensado meter la función en un Thread para
ejecutarla en segundo plano, pero cuando termina el proceso, la colección
está vacía. He comprobado que dentro del Thread, la colección si tiene
procesos, pero cuando termina el thread, vuelvo a hacer la comprobación en
el proceso llamante y la colección está vacía. Ya se que los thread utilizan
una zona local de memoria, pero están llenando una colección definida como
privada a nivel de clase y no a nivel de procedimiento. ¿Sabe alguien que
puede estar ocurriendo?.


private void Form1_Load(object sender, System.EventArgs e)
{
frmTBar.Dock=DockStyle.Bottom;
frmTBar.Show();
cProc= new ProcessOperations.SystemProcess(); // cProc es una clase que hace
operaciones con procesos
System.Threading.Thread t=new System.Threading.Thread(new
System.Threading.ThreadStart(leeProcesos));
t.Start();
MessageBox.Show(cProc.ProcesosVentana.ToString()); //Muestra el número de
procesos obtenidos. Aquí NO lo hace correctamente.
}
private void leeProcesos()
{
string pName;
int pHandle;
cProc.leeProcesosVentana(); //Almacena en una colección dentro de la clase
los procesos que utilizan ventana
MessageBox.Show(cProc.ProcesosVentana.ToString()); //Muestra el número de
procesos obtenidos. Aquí lo hace correctamente.
}

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Anonimo
15/04/2005 - 14:32 | Informe spam
Puedes realizar mayor aportación de código ?


Hola a todos,

estoy haciendo una aplicación en la que simular un


escritorio de Windows
(por diversos motivos no puedo utilizar el escritorio


por defecto). Para
crear los botones de las aplicaciones abiertas en la


barra de tareas utilizo
System.Diagnostics.Process.GetProcesses() e introduzco


aquellos procesos con
MainWindowHandle diferente de IntPtr.Zero, que utilizan


ventana, en una
colección de procesos. El problema es, que GetProcesses


() produce un
retardo, por lo que había pensado meter la función en un


Thread para
ejecutarla en segundo plano, pero cuando termina el


proceso, la colección
está vacía. He comprobado que dentro del Thread, la


colección si tiene
procesos, pero cuando termina el thread, vuelvo a hacer


la comprobación en
el proceso llamante y la colección está vacía. Ya se que


los thread utilizan
una zona local de memoria, pero están llenando una


colección definida como
privada a nivel de clase y no a nivel de procedimiento.


¿Sabe alguien que
puede estar ocurriendo?.


private void Form1_Load(object sender, System.EventArgs


e)
{
frmTBar.Dock=DockStyle.Bottom;
frmTBar.Show();
cProc= new ProcessOperations.SystemProcess(); // cProc


es una clase que hace
operaciones con procesos
System.Threading.Thread t=new System.Threading.Thread(new
System.Threading.ThreadStart(leeProcesos));
t.Start();
MessageBox.Show(cProc.ProcesosVentana.ToString


()); //Muestra el número de
procesos obtenidos. Aquí NO lo hace correctamente.
}
private void leeProcesos()
{
string pName;
int pHandle;
cProc.leeProcesosVentana(); //Almacena en una colección


dentro de la clase
los procesos que utilizan ventana
MessageBox.Show(cProc.ProcesosVentana.ToString


()); //Muestra el número de
procesos obtenidos. Aquí lo hace correctamente.
}

Muchas gracias.


.

Respuesta Responder a este mensaje
#2 Víctor
17/04/2005 - 20:15 | Informe spam
Exactamente, ¿que parte de código necesitas?. Si me das tu dirección puedo
enviartela.

escribió en el mensaje
news:068a01c541b7$3558f490$

Puedes realizar mayor aportación de código ?


Hola a todos,

estoy haciendo una aplicación en la que simular un


escritorio de Windows
(por diversos motivos no puedo utilizar el escritorio


por defecto). Para
crear los botones de las aplicaciones abiertas en la


barra de tareas utilizo
System.Diagnostics.Process.GetProcesses() e introduzco


aquellos procesos con
MainWindowHandle diferente de IntPtr.Zero, que utilizan


ventana, en una
colección de procesos. El problema es, que GetProcesses


() produce un
retardo, por lo que había pensado meter la función en un


Thread para
ejecutarla en segundo plano, pero cuando termina el


proceso, la colección
está vacía. He comprobado que dentro del Thread, la


colección si tiene
procesos, pero cuando termina el thread, vuelvo a hacer


la comprobación en
el proceso llamante y la colección está vacía. Ya se que


los thread utilizan
una zona local de memoria, pero están llenando una


colección definida como
privada a nivel de clase y no a nivel de procedimiento.


¿Sabe alguien que
puede estar ocurriendo?.


private void Form1_Load(object sender, System.EventArgs


e)
{
frmTBar.Dock=DockStyle.Bottom;
frmTBar.Show();
cProc= new ProcessOperations.SystemProcess(); // cProc


es una clase que hace
operaciones con procesos
System.Threading.Thread t=new System.Threading.Thread(new
System.Threading.ThreadStart(leeProcesos));
t.Start();
MessageBox.Show(cProc.ProcesosVentana.ToString


()); //Muestra el número de
procesos obtenidos. Aquí NO lo hace correctamente.
}
private void leeProcesos()
{
string pName;
int pHandle;
cProc.leeProcesosVentana(); //Almacena en una colección


dentro de la clase
los procesos que utilizan ventana
MessageBox.Show(cProc.ProcesosVentana.ToString


()); //Muestra el número de
procesos obtenidos. Aquí lo hace correctamente.
}

Muchas gracias.


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida