如何在C#中的timerTick事件中发送参数(参数)?

时间:2013-05-05 01:07:29

标签: c# parameters timer arguments

我想做这样的事情:

private void ttimer_Tick(object sender, EventArgs e, char[,] imatrix)
{
    Awesome code...
}

我有一个用图像填充DataGridView的方法,但每次我都需要等半秒钟。所以,我原来的方法是这样的:

private void myMethod(char[,] imatrix)
{
    Original awesome code...
}

我希望myMethod成为每500毫秒运行一次的timerTick事件。另外,我确实需要发送char [,] imatrix参数。我认为有必要在timerTick事件中接收对象发送者,EventArgs e吗?有什么建议?谢谢!

3 个答案:

答案 0 :(得分:1)

假设您已在本地使用char[,],我会使用lambdas:

char[,] imatrix = GetMyMatrix();
myTimer.Tick += (sender, args) => timer_Tick(sender, args, imatrix);

然后你应该让你的Tick处理程序调用很棒的代码:

private void timer_Tick(object sender, EventArgs e, char[,] imatrix)
{
    myMethod(imatrix);
    //... do something with the timer args
}

如果你真的打算对计时器的事件args做任何事情(只是想延迟调用myMethod(非常棒),只需跳过事件处理程序包装器方法并直接调用它来自lambda:

char[,] imatrix = GetMyMatrix();
myTimer.Tick += (sender, args) => myMethod(imatrix);

编辑:关于您的一个问题,是的,签名要求您只使用object sender, EventArgs e参数。但是,您不需要对它们执行任何操作,而lambda语法可帮助您忽略它们。哎呀,如果你想要多清理一下来说#34;我不关心事件句法"你可以替换这样的命名参数(尽管如果这是一个好的做法可能有争议):

char[,] imatrix = GetMyMatrix();
myTimer.Tick += (_, __) => myMethod(imatrix);

答案 1 :(得分:0)

您无法更改Ticker的Tick方法签名。相反,您可以创建一个全局变量并使用它。

OR

您可以使用自动收报机的标签属性。将矩阵存储在那里。无论在哪里调用ticker的事件,都会将发送者强制转换为Ticker,然后投射其Tag属性以获取矩阵。

答案 2 :(得分:0)

也许您在sender对象中添加了一个公共属性,然后将sender方法参数强制转换为此对象,使您可以访问char [,]矩阵数据。