Вы не можете сделать это в самом методе - вы должны эффективно информировать обработчик событий о его контексте.Самый простой способ сделать это с помощью лямбда-выражения или анонимного метода:
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);
}
Здесь анонимный метод (бит с ключевым словом delegate
) создал делегата, который знает о Index
параметр до InitTimer
.Он просто вызывает метод KeepAliveElapsed
.Я использовал синтаксис анонимного метода, потому что вам не нужны были аргументы отправителя или события;если вам они нужны , я бы вместо этого использовал лямбда-выражение, например
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);
}
(обратите внимание, что условно параметр Index
должен называться index
, кстати)