您不能在方法本身内这样做-您必须使事件处理程序有效地了解其上下文。最简单的方法是使用lambda表达式或匿名方法:
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
方法。我使用了匿名方法语法,因为您不需要sender或event参数;如果您
做
如果需要,我可能会使用lambda表达式,例如
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
,BTW)