disparar evento en el mismo hilo

08/11/2004 - 19:51 por Herbert Saal | Informe spam
Hola,

Tengo una clase que usa una instancia del timer
"System.Windows.Forms.Timer". El evento que se dispara tmr_Tick, se dispara
en el mismo hilo que la aplicación principal.

Quiero hacer esto mismo pero sin usar el timer dependiente de
System.Windows.Forms. Intente con los otros tipos de timers como el
System.Threading.Timer, pero estos se ejecutan en otro hilo.

saludos,
Herbert Saal

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
08/11/2004 - 20:12 | Informe spam
Si nos explicas por que no te sirve el System.Windows.Forms.Timer y por que
la necesidad de que sea el mismo hilo, quiza te podamos sugerir alguna
solución.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#2 Herbert Saal
09/11/2004 - 15:50 | Informe spam
La idea principal de mi programa es la siguiente.
Tengo un programa que debe comunicarse con varios servidores via TCP (para
ello estoy usando un componente para este proposito). No conozco el número
de servidores a los que debo conectarme, por ese motivo debo crear
dinamicamente los clientes TCP que se comunicarán con los servidores. Cada
cliente debe declarar un evento que indica si la respuesta del servidor
llego.

Este esquema funciona sin problemas cuando uso un solo hilo. Sin embargo
necesito crear un timer para controlar cuando terminaron las solicitudes los
servidores y poder asignar nuevas solicitudes. Sin embargo con el timer que
crea otro hilo los eventos de respuesta no llegan nunca y tampoco las
solicitudes llegan a los servidores.

La solución que encontré fue usar el timer de forms que trabaja en el mismo
hilo principal. Sin embargo esta solución me obliga a usar forms.

Creo que el problema puede estar tambien en la instanciación de los clientes
que se estan creando en el evento del timer y luego son almacenados en un
array. El array esta declarado al nivel del hilo principal, tengo dudas en
el acceso a las variables de otro hilo.
Adjunto el esquema general de mi código.

public class RequestServices
{
private CommToolClient.CCommToolClient CommMsg;
private ArrayList ArrComm;

private void tmrCheckResponses(object sender,
System.Timers.ElapsedEventArgs e)
{
tmrCheckResponses.Stop();
if(!ProcessTasks())
tmrCheckResponses.Start();
}

private bool ProcessTasks()
{
DataSet ListServers;

GetListFreeServers(ref DataSet ListServers);
RequestTasks(DataSet ListServers);
return(CheckTasksFinished());
}

private void RequestTasks(DataSet ListServers)
{

foreach(DataRow dr in ListServers.Tables[0].Rows)
{
CommMsg = new CommToolClient.CComToolClient();
ArrComm.Add(new ClientClass(CommMsg, ..));
CommMsg.ServerResponseEvent += new
CommToolClient.CComToolClient.ServerResponseHandler(CommMsg_ServerResponseEvent);

//Esta función no llega a enviar el mensaje al servidor.
CommMsg.SendMessage(Message, (string)dr[0], (int)dr[1]);
//Message, sServerIP, iServerPort
}

}

//Este evento no se llega a disparar
private void CommMsg_ServerResponseEvent(object sender,
CommToolClient.CComToolClient.ServerResponse e)
{
.
UpdateTaskStatus(e.ResponseMessage);
.
}
}

Gracias por adelantado,

Herbert Saal.


"Rodrigo Corral [MVP]" wrote in message
news:%
Si nos explicas por que no te sirve el System.Windows.Forms.Timer y por
que la necesidad de que sea el mismo hilo, quiza te podamos sugerir alguna
solución.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org

Respuesta Responder a este mensaje
#3 Rodrigo Corral [MVP]
10/11/2004 - 12:40 | Informe spam
Creo que estas enfocando mal el problema, deberias usar objetos de
sincronización. El enfoque es crear un evento por cada hilo que levantes y
que el hilo señale el evento cuando temina su trabajo. Admemás lo ideal
seria usar el pool de hilos de .net, para mejor rendimiento aun.

Lee la primera pregunta de este articulo.
http://msdn.microsoft.com/msdnmag/i...fault.aspx

Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida