我正在开发一个应用程序,我需要以下要求:
假设我的表单中有一个按钮和一个标签(最初的可见性设置为false),并且用户点击了按钮,那么标签应该显示一些文本,我在按钮点击中分配给标签。但是这个标签应该只显示一段时间,比如大约3秒,然后它应该自动隐藏。如果我给了这个:
private void button1_Click(object sender, EventArgs e)
{
label1.Visible=true;
label1.Text= "Magic";
Thread.Sleep(3000);
label1.Visible=false;
}
此代码无助于此目的。这样做的方法是什么?
答案 0 :(得分:5)
尝试用以下方法替换方法的最后两行:
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 3000;
timer.Tick += (source, e) => {label1.Visible = false; timer.Stop();};
timer.Start();
在WinForms中使用Thread.Sleep()绝不是一个好主意;改为使用计时器。
答案 1 :(得分:2)
Create
一个timer,其中3分为Interval
,启动它,并在计时器Tick事件中将Visible
设置为false
。另外别忘了停止计时器。
从不在您的UI线程中调用Thread.Sleep
:应用程序将被阻止,因为UI线程在睡眠时不会接受消息(用户点击...)。
答案 2 :(得分:2)
// create a global _timer object
static Timer _timer; // From System.Timers
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Magic";
// Thread.Sleep(3000); // don't do Thread.Sleep()!
label1.Visible = false;
Start();
}
static void Start()
{
label1.Visible = true;
_timer = new Timer(3000); // Set up the timer for 3 seconds
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true; // Enable it
}
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
label1.Visible = false;
_timer.Stop();
}
答案 3 :(得分:1)
使用Timer,也许是Windows.Forms.Timer。您可能需要在需要时启用和禁用它,而不是必需的。你当前的方式没有帮助,因为你让主要的UI线程进入睡眠状态。没用。