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

如何在C#中的timerTick事件中发送参数?,c#,parameters,timer,arguments,C#,Parameters,Timer,Arguments,我想这样做: private void ttimer_Tick(object sender, EventArgs e, char[,] imatrix) { Awesome code... } private void myMethod(char[,] imatrix) { Original awesome code... } 我有一个用图像填充DataGridView的方法,但是每次我都需要等待半秒钟。我最初的方法是这样的: private void ttimer_Tick

我想这样做:

private void ttimer_Tick(object sender, EventArgs e, char[,] imatrix)
{
    Awesome code...
}
private void myMethod(char[,] imatrix)
{
    Original awesome code...
}
我有一个用图像填充DataGridView的方法,但是每次我都需要等待半秒钟。我最初的方法是这样的:

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

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

您不能更改股票代码的勾选方法签名。相反,您可以创建一个全局变量并使用它


您可以使用ticker的标记属性。将矩阵存储在那里。无论在哪里调用ticker的事件,都将sender强制转换为ticker,然后强制转换其标记属性以获取矩阵。

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

假设您已经拥有
char[,]
本地可用,我会使用lambdas:

char[,] imatrix = GetMyMatrix();
myTimer.Tick += (sender, args) => timer_Tick(sender, args, imatrix);
然后,您应该让您的
处理程序调用可怕的代码:

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);
编辑:关于你的一个问题,是的,签名要求你只使用
对象发送者EventArgs e
参数。但是,你不需要对它们做任何事情,lambda语法帮助你忽略它们。见鬼,如果你想更清楚一点,说“我不在乎事件语法”您可以这样替换命名参数(尽管这是否是一种好的做法可能会引起争议):