如何将参数传递给ElapsiveEventHandler调用的函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (67)

如何将参数传递给ElapsiveEventHandler调用的函数?

我的代码:

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);
}

我想要做的是在括号之间([and])。

提问于
用户回答回答于

您不能在方法本身中这样做--您必须使事件处理程序有效地了解其上下文。最简单的方法是使用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方法。我使用匿名方法语法,因为您不需要发送方或事件args;如果干过需要它们,我可能会用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参数应该被调用index)

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问5 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    2 粉丝477 提问3 回答
  • 军哥

    重庆雷驰信息技术有限公司 · 经理 (已认证)

    5 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券