告诉我这个方法Thread.Sleep();在这样一段代码中是如何工作的,例如
listBox1.Items.Add("First Item");
Thread.Sleep(5000);
listBox1.Items.Add("Second Item");
原来这段代码在执行的时候,先是有一个延迟,然后马上加入了2个对象listbox。但是有必要先添加第一个对象,5 秒后,然后才添加第二个对象。我究竟做错了什么?
告诉我这个方法Thread.Sleep();在这样一段代码中是如何工作的,例如
listBox1.Items.Add("First Item");
Thread.Sleep(5000);
listBox1.Items.Add("Second Item");
原来这段代码在执行的时候,先是有一个延迟,然后马上加入了2个对象listbox。但是有必要先添加第一个对象,5 秒后,然后才添加第二个对象。我究竟做错了什么?
事实上,上面的代码完全按照你写的那样工作:首先,添加第一个条目,然后延迟流,然后添加第二个条目。但是您会看到不同的结果:先是延迟,然后添加了两条记录。这是因为您正在主 UI 线程上进行延迟。UI线程有一个所谓的。它处理的消息队列。添加第一个条目后,将向此队列添加一条消息,说明您需要在控件中绘制文本。但是因为你立即延迟,处理这个队列停止并且线程根本没有时间在控件中绘制第一条记录。延迟结束后,另一个消息被添加到队列中,线程绘制两个条目。
很难建议如何解决这个问题,因为不清楚你想要实现什么。此外,延迟(尤其是在 UI 线程上)通常不是一个好主意。或者,您可以要求 UI 线程在延迟之前处理消息队列:
但是,同样,这只是为了满足好奇心。在一个好的方面,你需要摆脱延迟,以不同的方式做你想做的事。例如,使用计时器或async/await。