System.Timers.timer 这个会引发多线程并发,我需要它监督某某时间发邮件,它发了n份,如何控制这个Timer多线程????

解决方案 »

  1.   

    可以写个demo试试下的  时间是检验真理的唯一标准
      

  2.   

    找一个队列Queue,在多线程中每发送一次邮件就lock然后向queue中enqueue加入一条消息,然后timer定时lock后,dequeue这个队列
      

  3.   

    这是个演示的例子,多线程定时循环向queue中添加消息,timer定时从queue取出消息。        static void Main(string[] args)
            {
                List<Thread> threadlist = new List<Thread>();
                for (int i = 0; i < 5; i++)
                {
                    Thread th = new Thread(new ParameterizedThreadStart(Func));
                    threadlist.Add(th);
                }
                isStop = false;
                for (int i = 0; i < threadlist.Count; i++)
                {
                    threadlist[i].Start(i);
                    Console.WriteLine("线程"+i.ToString()+"已经启动...");
                }
                Timer timer = new Timer(new TimerCallback(timerFun),null,0,1000);
            }
            static bool isStop = true;
            static Queue<string> queue = new Queue<string>();
            static void Func(object obj)
            {
                int index = (int)obj;            while (!isStop)
                {
                    lock (queue)
                    {
                        queue.Enqueue("现在时间" + DateTime.Now.ToString());
                    }
                    Thread.Sleep(1000);
                }
            }        static void timerFun(object obj)
            {
                lock (queue)
                {
                    if (queue.Count > 0)
                    {
                        string s = queue.Dequeue();
                        Console.WriteLine("取出消息:" + s);
                    }
                }
            }