system.timers.timer数组多事件的问题
请教一下论坛高手,我有一个system.timers.timer [] timer 数组,数组个数是动态的。
如何生成动态的事件。例如我想的结果这样的,每个timer[]执行不同的事件。。避免重复调用一个事件造成堵塞或时间判断上的延时。
--------------------编程问答-------------------- 一个一个写是可以的:
int count=5;//COUNT的值是动态的
for (int i = 0; i < count; i++)
{
int tag = i;
System.Timers.Timer[] timer = new System.Timers.Timer[count];
timer[tag]= new System.Timers.Timer();
timer[tag].Interval = 1000;
timer[tag].AutoReset = true; ;
timer[i].Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
Timers_Elapsed[i](sender, e, tag);
};
timer[tag].Start()
}
private void Timers_Elapsed[i](object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
private void Timers_Elapsed[i](object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
private void Timers_Elapsed[i](object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
private void Timers_Elapsed[i](object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
timer[0].Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
Timers_Elapsed0(sender, e, tag);
};
timer[1].Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e)
{
Timers_Elapsed1(sender, e, tag);
};
private void Timers_Elapsed0(object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
private void Timers_Elapsed1(object sender, System.Timers.ElapsedEventArgs e,int tag)
{执行代码}
--------------------编程问答-------------------- 楼上的兄弟,一个一个的写,当然可以,就是怎么样动态的写。 --------------------编程问答-------------------- 如果Timer都是同一个线程的话,就算多个,一样的达不到你的目的,当其中一个阻塞,其它的也会被阻塞 --------------------编程问答-------------------- 首先,每一个Timers_Elapsed执行的任务都一样? --------------------编程问答-------------------- 给段代码参考下:
private System.Windows.Forms.Timer[] dt;
private void GetList()
{
dt = new System.Windows.Forms.Timer[listView1.Items.Count];
for (int n = 0; n < listView1.Items.Count; n++)
{
dt[n] = new System.Windows.Forms.Timer();
dt[n].Interval = int.Parse(listView1.Items[n].SubItems[1].Text) * 1000 * 60;
dt[n].Enabled = true;
dt[n].Tag = listView1.Items[n].SubItems[0].Text ;
dt[n].Tick+=new EventHandler(Form1_Tick);
}
}
private void Form1_Tick(object sender, EventArgs e)
{
Thread _donethread = new Thread(new ParameterizedThreadStart(DoneWork));
_donethread.IsBackground = true;
_donethread.Start((sender as System.Windows.Forms.Timer).Tag);
}
private void DoneWork(object tablename)
{
if (statusBar1.InvokeRequired)
{
statusBar1.Invoke(new DoneWorkdelegate(DoneWork), tablename);
}
else
{
try
{
string insertsql = string.Empty;
statusBar1.Text = "正在刷新数据....";
string _tablename = tablename as string;
switch (_tablename)
{
}
} --------------------编程问答-------------------- 楼上的代码确实有用。但我是用的System.timers.timer ,它没有tag属性 我如何区分是哪个timer响应事件?。 --------------------编程问答-------------------- 微软的Timer貌似实现不了你要的功能, --------------------编程问答--------------------
可以创建的时候加time.name --------------------编程问答-------------------- 楼上的danny_2007兄,
System.timers.timer 没有name属性 --------------------编程问答--------------------
在创建Time的时候给Tag属性复值 作标识 --------------------编程问答-------------------- System.timers.timer 也没有TAG属性 --------------------编程问答-------------------- 再加一个委托试试
public delegate void Timers_Elapsed(object sender, System.Timers.ElapsedEventArgs e, int tag);--------------------编程问答--------------------
private Timers_Elapsed creater = new Timers_Elapsed((obj, e, tag) =>
{
//执行代码
});
private System.Timers.ElapsedEventHandler InitElapsedEventHandler(int i)
{
return new System.Timers.ElapsedEventHandler(delegate(object sender, System.Timers.ElapsedEventArgs e)
{
var te = new Timers_Elapsed(creater);
te(sender, e, i);
});
}
timer[i].Elapsed += InitElapsedEventHandler(i);
private System.Timers.ElapsedEventHandler InitElapsedEventHandler(int i)
{
return new System.Timers.ElapsedEventHandler(delegate(object sender, System.Timers.ElapsedEventArgs e)
{
creater(sender, e, i);
});
}
补充:.NET技术 , C#