请教一下论坛高手,
我有一个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)
        {执行代码}

解决方案 »

  1.   

    一个一个写是可以的:
           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)
            {执行代码}
      

  2.   

    如果Timer都是同一个线程的话,就算多个,一样的达不到你的目的,当其中一个阻塞,其它的也会被阻塞
      

  3.   

    首先,每一个Timers_Elapsed执行的任务都一样?
      

  4.   

    给段代码参考下:
            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)
                        {
                        }
                     }
      

  5.   

    楼上的代码确实有用。但我是用的System.timers.timer ,它没有tag属性 我如何区分是哪个timer响应事件?。
      

  6.   

    微软的Timer貌似实现不了你要的功能,
      

  7.   


    可以创建的时候加time.name 
      

  8.   

    楼上的danny_2007兄,
    System.timers.timer  没有name属性
      

  9.   


    在创建Time的时候给Tag属性复值 作标识 
      

  10.   

    System.timers.timer  也没有TAG属性
      

  11.   

    再加一个委托试试
    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);
      

  12.   

    private System.Timers.ElapsedEventHandler InitElapsedEventHandler(int i)
    {        
        return new System.Timers.ElapsedEventHandler(delegate(object sender, System.Timers.ElapsedEventArgs e)
        {
            creater(sender, e, i);
        });
    }