我有以下代码:
Hide()
if(a > b)
{
label.Text = "a is greater than b";
Show();
Thread.Sleep(50000);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在应用程序启动后立即隐藏 winform。如果 a>b 在任何时候,它将在标签中显示带有该消息的 winform 50 秒,然后再次隐藏。标签也设置为 autosize = true;
上面的代码有效但标签没有显示任何文字?这也是使用线程睡眠显示 winfor 一段时间的正确方法吗?
Thorsten 是对的,Sleep 正在冻结 UI 线程,因此 UI 不会刷新,但您也可以执行以下操作作为解决方法:
Hide()
if(a > b)
{
label.Text = "a is greater than b";
Show();
Refresh();
Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)
但最干净的解决方案当然是:
Hide()
if(a > b)
{
label.Text = "a is greater than b";
Show();
Task.Factory
.StartNew(() => Thread.Sleep(5000))
.ContinueWith(() => Close(), TaskScheduler.FromCurrentSynchronizationContext());
}
Run Code Online (Sandbox Code Playgroud)
但是不要忘记添加正确的 using 子句以使用任务并行库:
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
TPL 在 .NET 4 以后可用。更多信息:http : //msdn.microsoft.com/en-us/library/dd460717.aspx