1
caoyue 2015-04-09 17:36:25 +08:00
贴个完整点的代码比较方便看问题吧=-=
|
2
dong3580 2015-04-09 17:52:08 +08:00
static
|
3
dong3580 2015-04-09 18:10:18 +08:00
抱歉回复错了:
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-04-10 00:06:56 +08:00
Timer 的本质是线程啊,t.Start()开始一个新线程。也就是说,t.Start()并不一定是马上执行的,需要看系统对线程的分配。
//System.Threading.Thread.Sleep(1000);强制睡眠当前线程时,新线程肯定就能运行了,能正确删除a。 如果在Console.Write(M_Status.Count.ToString());之前没有大量耗时运算或切换线程的操作的话,大概率是Timer的事件还没运行,这边就已经运行结束了。 |