
1 caoyue 2015 年 4 月 9 日 贴个完整点的代码比较方便看问题吧=-= |
2 dong3580 2015 年 4 月 9 日 static |
3 dong3580 2015 年 4 月 9 日 抱歉回复错了: System.Timers.Timer 还没执行已经输出结果了,也就是hashtable还没移除键值对,已经输出结果了。 可以加个睡觉1s就正常。 #####写个简单的eg: ''' C# public static Hashtable M_Status= Hashtable.Synchronized(new Hashtable()); static void Main(string[] args) { M_Status = Hashtable.Synchronized(new Hashtable()); M_Status.Add("a", "a"); M_Status.Add("b", "b"); Timer t = new Timer(); t.Elapsed += t_Elapsed; t.Start(); //System.Threading.Thread.Sleep(1000); Console.Write(M_Status.Count.ToString()); Console.ReadLine(); } static void t_Elapsed(object sender, ElapsedEventArgs e) { M_Status.Remove("a"); } ''' |
4 hiro0729 2015 年 4 月 10 日 Timer 的本质是线程啊,t.Start()开始一个新线程。也就是说,t.Start()并不一定是马上执行的,需要看系统对线程的分配。 //System.Threading.Thread.Sleep(1000);强制睡眠当前线程时,新线程肯定就能运行了,能正确删除a。 如果在Console.Write(M_Status.Count.ToString());之前没有大量耗时运算或切换线程的操作的话,大概率是Timer的事件还没运行,这边就已经运行结束了。 |