Vous ne pouvez pas le faire dans la méthode elle-même - vous devez rendre votre gestionnaire d'événements conscient de son contexte, efficacement. La façon la plus simple de le faire est avec une expression lambda ou méthode anonyme:
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);
}
Ici, la méthode anonyme a créé un délégué qui connaît sur le paramètre Index
-InitTimer
(le bit avec le mot-clé delegate
). Il appelle simplement la méthode KeepAliveElapsed
. J'ai utilisé la syntaxe de la méthode anonyme car vous n'avez pas besoin de l'expéditeur ou des arguments de l'événement; Si vous avez besoin besoin d'eux, j'utiliserais probablement une expression lambda à la place, par exemple.
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);
}
(Notez que conventionnellement le paramètre Index
doit être appelé index
, btw.)
(Il est amusant de revenir à de vieilles questions et de voir combien vous avez appris au cours des 3 dernières années et comment vous J'ai évolué, c'est une des raisons pour lesquelles j'aime ce site.) – lesderid