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

如何将多个参数传递给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函数? 提前致谢。

为什么不创建一个具有包含要传入的其他项的属性的类? 然后只需传递实际的容器类。

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

 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; } 

编译器负责在幕后构建类和管道。 例如,请参阅关于闭包的说明 。