【发布时间】:2016-11-10 06:28:15
【问题描述】:
我这样做:
clear();
coinRefundComplete.Visible = true;
state = 0;
System.Threading.Thread.Sleep(4000);
clear();
greeting.Visible = true;
rate.Visible = true;
refundTicket.Visible = true;
currentTime.Visible = true;
我希望 coinRefundComplete 文本(它是一个标签)出现 4 秒钟,然后通过我用 clear() 定义的方法清除,然后发生其他一些事情。相反,在我使用第一个 clear() 清除表单后,我的表单空白 4 秒,然后正确完成。
【问题讨论】:
-
你阻塞了 UI 线程。更改将不可见,您永远不应该阻止它。如果您想暂时展示一些东西,请使用计时器。
-
如果所有这些代码都在一个方法中 - 那么在方法完全执行之前不会更新表单。
-
在
System.Threading.Thread.Sleep(4000);之前插入Application.DoEvents();- 让 UI 有机会重绘标签 -
@Fabio,你是说我不能在 1 种方法中多次清除表格?
-
@DmitryBychenko -
Application.DoEvents()不好。与在 UI 线程上调用Thread.Sleep(...)一样糟糕 - 或者可能更糟糕。
标签: c# .net multithreading winforms