如何将多个参数传递给C#中System.Threading.Timer()
所期望的回调?
timer1[timer] = new System.Threading.Timer(databaseTrensfer, row, dueTime, interval);
public void databaseTrensfer(object row,object unitID)
{
// do work here
}
如何将第二个参数传递给databaseTrensfer
函数?
提前谢谢。
答案 0 :(得分:4)
为什么不创建一个包含要传入的其他项的属性的类?然后只需传递实际的容器类。
答案 1 :(得分:3)
定时器回调定义为采用单个参数:
public delegate void TimerCallback(object state);
如果你需要向你的回调传递几个参数,这些参数在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)
{
....
}
撰写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;
}
编译器负责在幕后构建类和管道。例如,请参阅explanation about closures。