如何将多个参数传递给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; }
编译器负责在幕后构建类和管道。 例如,请参阅关于闭包的说明 。