如何为窗口服务中的每个不同线程设置计时器

时间:2012-06-14 06:05:33

标签: c# multithreading timer

尝试为每个不同的线程设置不同时间的计时器,据我所知,如果我们在main方法中设置一个计时器,这对所有线程都有效,所以我想知道如何为每个不同的线程设置计时器在没有杀死线程的情况下,请对此提出建议

static Timer _timer;

static void Main(string[] args)
{
   _timer = new Timer(10000);
   _timer.Enabled = true;
   _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
 }

上面粘贴的代码将为每十秒运行的所有线程做好工作,但是主方法中的计时器每隔十秒运行一次所有线程,我的担心是必须为每个线程设置定时器不同时间

要点:

为什么我问这个问题,这里我要求窗口服务,做什么意思,例如在具有三个不同线程(XYZ,ABC,PQR)的窗口服务中,如果我启动服务,所有要初始化的三个线程和那些线程应该作为基于我们从应用程序配置传递的计时器设置,这些线程必须根据已设置的时间点火,亲切的建议

2 个答案:

答案 0 :(得分:0)

如果要在给定时间后启动某些线程,可以使用System.Threading.Timer。

int[] times = new int[] { 10000, 14000, 17000 };
foreach (int time in times)
{
System.Threading.Timer t = new System.Threading.Timer(MyTimerCallback, null, time, 0);
...
}

private void MyTimerCallback(object state)
{
  //Do some awesome stuff
}

答案 1 :(得分:0)

您是否尝试过使用[ThreadStatic]属性? 这个属性定义了它之间不会共享它所附带的veriable,并且会为每个线程创建一个他的副本。

[ThreadStatic]
static Timer _timer;

void MyThreadStartMethod()
{
    _timer=new Timer(value);
    ...
}

而且,我在代码中看不到任何线程。 CLR调用Main方法来启动应用程序,并在每个不同的进程中运行。