如何将多个参数传递给 system.threading.timer()

0 .net c#

如何将多个参数传递给System.Threading.Timer()C# 中预期的回调?

timer1[timer] = new System.Threading.Timer(databaseTrensfer, row, dueTime, interval);

public void databaseTrensfer(object row,object unitID)
{
   // do work here
}
Run Code Online (Sandbox Code Playgroud)

如何将第二个参数传递给我的databaseTrensfer函数?提前致谢。

Pie*_*aud 5

定时器回调定义为采用单个参数:

public delegate void TimerCallback(object state);
Run Code Online (Sandbox Code Playgroud)

如果您需要将多个参数传递给您的回调,当您在Timer构造函数上注册回调时就知道这些参数,那么您可以使用 lambda:

Timer CreateTimer(object unitID)
{
    object   row      = ...
    TimeSpan dueTime  = ...
    TimeSpan interval = ...

    return new Timer(x => DatabaseTransfer (x, unitID), row, dueTime, interval);
}

static void DatabaseTransfer(object row, object unitID)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

写入x => DataTransfer (x, unitID)捕获unitID变量的状态,大致相当于:

Timer CreateTimer(object unitID)
{
    object   row      = ...
    TimeSpan dueTime  = ...
    TimeSpan interval = ...

    $Temp temp = new $Temp (unitID);

    return new Timer(temp.Callback, row, dueTime, interval);
}

class $Temp
{
    public $Temp(object arg)
    {
        this.arg = arg;
    }
    public void Callback(object x)
    {
        DataTransfer (x, this.arg);
    }
    private object arg;
}
Run Code Online (Sandbox Code Playgroud)

编译器负责在幕后构造类和管道。例如,参见关于闭包解释