如何将多个参数传递给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函数?提前致谢。
定时器回调定义为采用单个参数:
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)
| 归档时间: |
|
| 查看次数: |
5178 次 |
| 最近记录: |