valores valor salida referencia reciben que por paso pase pasar parametros objetos metodos funciones ejemplos como array c# events timer elapsed

valor - pasar objetos como parametros en c#



¿Cómo pasar parámetros a la función llamada por ElapsedEventHandler? (1)

No puede hacer esto dentro del método en sí mismo, debe hacer que su manejador de eventos sea consciente de su contexto, de manera efectiva. La forma más sencilla de hacerlo es con una expresión lambda o un método anónimo:

private static void InitTimer(int Index) { keepAlive[Index] = new Timer(); keepAlive[Index].Interval = 3000; keepAlive[Index].Elapsed += delegate { KeepAliveElapsed(Index); }; keepAlive[Index].Start(); } public static void KeepAliveElapsed(int Index) { PacketWriter writer = new PacketWriter(); writer.AppendString("KEEPALIVE|.//"); ServerSocket.Send(writer.getWorkspace(), Index); ServerSocket.DisconnectSocket(Index); }

Aquí, el método anónimo (el bit con la palabra clave delegate ) ha creado un delegado que conoce el parámetro Index para InitTimer . Simplemente llama al método KeepAliveElapsed . He usado la sintaxis del método anónimo porque no necesitabas los argumentos del remitente o del evento; si los necesitaras, probablemente usaría una expresión lambda en su lugar, por ejemplo,

private static void InitTimer(int Index) { keepAlive[Index] = new Timer(); keepAlive[Index].Interval = 3000; keepAlive[Index].Elapsed += (sender, args) => KeepAliveElapsed(sender, Index); keepAlive[Index].Start(); } public static void KeepAliveElapsed(object sender, int Index) { PacketWriter writer = new PacketWriter(); writer.AppendString("KEEPALIVE|.//" + sender); ServerSocket.Send(writer.getWorkspace(), Index); ServerSocket.DisconnectSocket(Index); }

(Tenga en cuenta que, convencionalmente, el parámetro de Index debería llamarse index , por cierto).

¿Cómo pasar parámetros a la función llamada por ElapsedEventHandler?

Mi código:

private static void InitTimer(int Index) { keepAlive[Index] = new Timer(); keepAlive[Index].Interval = 3000; keepAlive[Index].Elapsed += new ElapsedEventHandler(keepAlive_Elapsed[, Index]); keepAlive[Index].Start(); } public static void keepAlive_Elapsed(object sender, EventArgs e[, int Index]) { PacketWriter writer = new PacketWriter(); writer.AppendString("KEEPALIVE|.//"); ServerSocket.Send(writer.getWorkspace(), Index); ServerSocket.DisconnectSocket(Index); }

Lo que quiero hacer es entre corchetes ([y]). Pero solo hacerlo así obviamente no funciona ...