【问题标题】:How to send arguments (parameters) in a timerTick event in C#?如何在 C# 的 timerTick 事件中发送参数(参数)?
【发布时间】:2013-04-29 03:04:42
【问题描述】:

我想做这样的事情:

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 对吗?有什么建议?谢谢!

【问题讨论】:

    标签: c# parameters timer arguments


    【解决方案1】:

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

    你可以使用ticker的Tag属性。将您的矩阵存储在那里。无论何时调用ticker 的事件,将sender 转换为Ticker,然后将其Tag 属性转换为您的矩阵。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        假设您已经在本地拥有 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
        }
        

        如果您实际上并不打算对计时器的事件参数做任何事情(只想延迟调用 myMethod(真棒),只需完全跳过事件处理程序包装方法并直接从 lambda 调用它:

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

        编辑:关于您的一个问题,是的,签名要求您仅使用object sender, EventArgs e 参数。但是,您不需要对它们做任何事情,而 lambda 语法可以帮助您忽略它们。哎呀,如果你想更清楚地说“我不关心事件语法”,你可以这样替换命名参数(尽管这是否是一个好习惯可能值得商榷):

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-23
          • 1970-01-01
          • 2011-07-20
          • 1970-01-01
          • 2012-09-28
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多