当前位置:编程学习 > C#/ASP.NET >>

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貌似实现不了你要的功能, --------------------编程问答--------------------
引用 6 楼 qgipfk168 的回复:
楼上的代码确实有用。但我是用的System.timers.timer ,它没有tag属性 我如何区分是哪个timer响应事件?。


可以创建的时候加time.name  --------------------编程问答-------------------- 楼上的danny_2007兄,
System.timers.timer  没有name属性 --------------------编程问答--------------------
引用 9 楼 qgipfk168 的回复:
楼上的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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,