我想做这样的事情:
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吗?有什么建议?谢谢!
答案 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 [,]矩阵数据。