可以把taskTime_Elapsed放到一个放状态的类中: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),不过基本原理也大致相同。
5楼lineages朋友的例子就是‘闭包’。例子里面有个错误,局部变量要放在闭包’外面: for (int i = 0; i < 3; i++) { var index = i; //放在闭包’外 new System.Timers.Timer().Elapsed += (sender, e) => { Console.WriteLine(index); // 使用closure }; }
就算创建了多个timer,其实还是都在主线程里啊,这样做有任何意义?
for (int i = 0; i < 3; i++)
{
new System.Timers.Timer().Elapsed += (sender, e) =>
{
var index = i;
...
};
}
{
int num;
public int GetNum()
{
return num;
}
}
{
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),不过基本原理也大致相同。
for (int i = 0; i < 3; i++)
{
var index = i; //放在闭包’外
new System.Timers.Timer().Elapsed += (sender, e) =>
{
Console.WriteLine(index); // 使用closure
};
}
有任何变量会没有tag属性的?反正暂时我是没见过.
有任何变量会没有tag属性的?反正暂时我是没见过.
没有tag
这样不行!!刚刚测试了 听我的,继承一个timer
这样不行!!刚刚测试了 听我的,继承一个timer
你能帮我写下简单的例子么 就我上面的代码!!嘿嘿,谢谢哈
有任何变量会没有tag属性的?反正暂时我是没见过.
没有tag
自己随手测试了一下,确实没有.
是我脑残了
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);
}
}
加了这个代码报错啊未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“GAKeyAnalysis.FrmCPGrabByIndeed.resources”正确嵌入或链接到程序集“GAKeyAnalysis”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。
我把这继承timer那个类放在.designer.cs这个文件里就可以了!!这是为什么
我把这继承timer那个类放在.designer.cs这个文件里就可以了!!这是为什么因为它“输给你了”。