我有一些正在更新DataSet的计时器。我需要定时器按顺序运行而不会碰到每个定时器。我可能同时只运行一两个或三个。所以他们的想法是他们必须运行1,2,3然后再运行1,2,3。我创造了这个小提琴,但我还没有把它弄下来:
class Example
{
private static ManualResetEvent mr = new ManualResetEvent(false);
private static AutoResetEvent event_1 = new AutoResetEvent(true);
private static AutoResetEvent event_2 = new AutoResetEvent(false);
private static void t1_Tick(object sender, EventArgs e)
{
//update ds inside here
//ds.Tables["Alarms"].Rows[0][0]="foo";
//same in all other Tick functions
Console.WriteLine("1");
mr.Set();
}
private static void t2_Tick(object sender, EventArgs e)
{
mr.WaitOne();
Console.WriteLine("2");
mr.Set();
}
private static void t3_Tick(object sender, EventArgs e)
{
mr.WaitOne();
Console.WriteLine("3");
mr.Set();
}
static void Main()
{
System.Timers.Timer t1 = new System.Timers.Timer();
t1.Elapsed += t1_Tick;
t1.Enabled = true;
System.Timers.Timer t2 = new System.Timers.Timer();
t2.Elapsed += t2_Tick;
t2.Enabled = true;
System.Timers.Timer t3 = new System.Timers.Timer();
t1.Elapsed += t1_Tick;
t1.Enabled = true;
Console.ReadKey();
}
}
如果只有两个定时器在运行,那么它必须是1,2,然后再是1,2
答案 0 :(得分:2)
您可以使用线程安全的DispatcherTimer
吗?
请参阅http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx