如何在C#中顺序运行线程

时间:2014-07-04 02:43:21

标签: c# multithreading sequence

我有一些正在更新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

1 个答案:

答案 0 :(得分:2)

您可以使用线程安全的DispatcherTimer吗?

请参阅http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx