C# 如何在c语言中选通定时器阵列#

C# 如何在c语言中选通定时器阵列#,c#,arrays,timer,C#,Arrays,Timer,我想得到一个计时器“foreach dataValue in _dataValues”,它存储在exp的数组中,timer[0]=timer0,timer[1]=timer1,timer[2]=timer2等等 Timer[] timer=new Timer[50]; int i = 0; foreach (int dataValue in _dataValues) { string a="timer" + i; t

我想得到一个计时器“foreach dataValue in _dataValues”,它存储在exp的数组中,timer[0]=timer0,timer[1]=timer1,timer[2]=timer2等等

Timer[] timer=new Timer[50];

int i = 0;

foreach (int dataValue in _dataValues)
 {             
     string a="timer" + i;              
     timer[i] =a;
     i++;
     timer1[i].Tick += new EventHandler(timer_Tick);
     timer1[i].Interval = (1000) * (2);

 }
但它提供了一个错误“无法将类型'string'隐式转换为'System.Windows.Forms.Timer',那么如何在Timer[i]中获取值呢?有人能帮我吗?

您正试图分配给
计时器的数组
只是
字符串
。尝试:

Timer[] timers=new Timer[50];

for (int index = 0; index < _dataValues.Length; index++)
{
     timers[index] = new Timer() { Interval = _dataValues[index] };
}

您正试图分配给
计时器的数组
只是
字符串
。尝试:

Timer[] timers=new Timer[50];

for (int index = 0; index < _dataValues.Length; index++)
{
     timers[index] = new Timer() { Interval = _dataValues[index] };
}

现在还不清楚你在追求什么。下面是一个大胆的猜测:

Timer[] timers = new Timer[50];
string timerNames = new string[50];

int i = 0;

foreach (int dataValue in _dataValues)
{    
     timeNames[i] = string.Format("{0}",i);
     timer[i] = new Timer();
     timer[i].Interval = dataValue;
     i++;
}

创建50个计时器可能是个坏主意。如果你想有不同的时间间隔,也可以用一个定时器来完成。只需创建一个具有最短公共间隔的计时器。

不清楚您要的是什么。下面是一个大胆的猜测:

Timer[] timers = new Timer[50];
string timerNames = new string[50];

int i = 0;

foreach (int dataValue in _dataValues)
{    
     timeNames[i] = string.Format("{0}",i);
     timer[i] = new Timer();
     timer[i].Interval = dataValue;
     i++;
}

创建50个计时器可能是个坏主意。如果你想有不同的时间间隔,也可以用一个定时器来完成。只需创建一个公共间隔最短的计时器。

您可以使用下面的语法

 public partial class _Default : System.Web.UI.Page
    {


        protected void Page_Load(object sender, EventArgs e)
        {


            List<Timerx> timers = new List<Timerx>();
            foreach (int dataValue in Enumerable.Range(0, 10))
            {
                timers.Add(new Timerx() { TimerName = "Timer"+dataValue });
            }
        }
    }
    public class Timerx : Timer
    {
        public string TimerName { get; set; }
    }
public分部类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
列表计时器=新列表();
foreach(可枚举范围(0,10)中的int数据值)
{
添加(new Timerx(){TimerName=“Timer”+dataValue});
}
}
}
公共类Timerx:Timer
{
公共字符串TimerName{get;set;}
}

您可以使用下面的语法

 public partial class _Default : System.Web.UI.Page
    {


        protected void Page_Load(object sender, EventArgs e)
        {


            List<Timerx> timers = new List<Timerx>();
            foreach (int dataValue in Enumerable.Range(0, 10))
            {
                timers.Add(new Timerx() { TimerName = "Timer"+dataValue });
            }
        }
    }
    public class Timerx : Timer
    {
        public string TimerName { get; set; }
    }
public分部类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
列表计时器=新列表();
foreach(可枚举范围(0,10)中的int数据值)
{
添加(new Timerx(){TimerName=“Timer”+dataValue});
}
}
}
公共类Timerx:Timer
{
公共字符串TimerName{get;set;}
}

什么存储在
\u dataValues
中?你想从哪里获得
timer1
值?我想你现在明白了@pioterWhat存储在
\u dataValues
中,你想从哪里获得
timer1
值?我想你现在明白了@pioterth这可能是复杂的-分解等等。计时器是一个相当轻量级的对象,它们都在内部使用队列。就像下一个事件的一个队列。<代码> Stask.Windows。窗体。定时器< /C> >不是我认为轻量级的。每个计时器都有自己的GCHandle,涉及所有操作的P/Invoke,并创建一个具有终结器的对象。我也没有看到使用你提到的公共队列的
System.Windows.Forms.Timer
。嗯,也许不使用这个队列,而是使用线程中的队列?代码示例中没有任何内容指示windows.forms。加上你的名字仍然是leightweiht,对不起。它p/调用是因为它在windows操作系统中使用了一个内部计时器机制,自然它p/调用-另一种选择是启动它自己的线程。我认为,只有
System.windows.Forms.timer
具有问题中提到的
Tick
事件。这可能是复杂的-factoring等等。计时器是一个相当轻量级的对象,它们都在内部使用队列。就像下一个事件的一个队列。<代码> Stask.Windows。窗体。定时器< /C> >不是我认为轻量级的。每个计时器都有自己的GCHandle,涉及所有操作的P/Invoke,并创建一个具有终结器的对象。我也没有看到使用你提到的公共队列的
System.Windows.Forms.Timer
。嗯,也许不使用这个队列,而是使用线程中的队列?代码示例中没有任何内容指示windows.forms。加上你的名字仍然是leightweiht,对不起。它p/调用是因为它在windows操作系统中使用了内部计时器机制,自然它p/调用-另一种选择是启动自己的线程。我认为,只有
System.windows.Forms.timer
具有问题中提到的
Tick
事件。