110,535
社区成员
发帖
与我相关
我的任务
分享
for (int i = 1; i <= 3; i++)
{
System.Timers.Timer taskTime = new System.Timers.Timer();
//我这里想把i传到taskTime_Elapsed里 然后方法里使用!因为是多个,全局参数不能用
taskTime.Interval = i * 1000;
taskTime.Enabled = true;
taskTime.AutoReset = true;
taskTime.Elapsed += new ElapsedEventHandler(taskTime_Elapsed);
}
void taskTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//我这里想获取到上面传过来的参数
System.Timers.Timer t = (System.Timers.Timer)sender;
t.Enabled = false;
t.Close();
}
class MyTimer : System.Timers.Timer
{
int num;
public int GetNum()
{
return num;
}
public void SetNum(int value)
{
num = value;
}
}
void taskTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
MyTimer t = (MyTimer)sender;
t.Enabled = false;
t.Close();
}
private void button1_Click(object sender, EventArgs e)
{
//string id = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
//var y = Assembly.Load(id);
for (int i = 1; i <= 3; i++)
{
MyTimer taskTime = new MyTimer();
//我这里想把i传到taskTime_Elapsed里 然后方法里使用!因为是多个,全局参数不能用
taskTime.Interval = i * 1000;
taskTime.SetNum(i);
taskTime.Enabled = true;
taskTime.AutoReset = true;
taskTime.Elapsed += new System.Timers.ElapsedEventHandler(taskTime_Elapsed);
}
}
for (int i = 0; i < 3; i++)
{
var index = i; //放在闭包’外
new System.Timers.Timer().Elapsed += (sender, e) =>
{
Console.WriteLine(index); // 使用closure
};
}
class Worker
{
public Worker(int i)
{
this.i = i;
}
int i;
public void taskTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//我这里想获取到上面传过来的参数
Console.WriteLine(i);
System.Timers.Timer t = (System.Timers.Timer)sender;
t.Enabled = false;
t.Close();
}
}
for (int i = 1; i <= 3; i++)
{
taskTime.Elapsed += new Worker(i).taskTime_Elapsed;
}
当然也可以用C#的闭包 (Closure),不过基本原理也大致相同。
class MyTimer : System.Timers.Timer
{
int num;
public int GetNum()
{
return num;
}
}