首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何向ElapsedEventHandler调用的函数传递参数?

如何向ElapsedEventHandler调用的函数传递参数?
EN

Stack Overflow用户
提问于 2010-06-22 23:04:13
回答 1查看 27.7K关注 0票数 21

如何向ElapsedEventHandler调用的函数传递参数?

我的代码:

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

我想做的是在括号(和)之间。但这样做显然行不通...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-22 23:06:23

你不能在方法本身中做到这一点--你必须让你的事件处理程序有效地知道它的上下文。最简单的方法是使用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关键字的位)创建了一个知道InitTimerIndex参数的委托。它只调用KeepAliveElapsed方法。我使用匿名方法语法是因为您不需要发送者或事件参数;如果您确实需要它们,我可能会使用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,btw。)

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3094422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档