0

我正在开发一个需要以下要求的应用程序:

假设我的表单中有一个按钮和一个标签(最初的可见性设置为 false),并且用户单击该按钮,那么该标签应该显示一些我在按钮单击时分配给该标签的文本。但是这个标签应该只显示一段时间,比如大约 3 秒,然后它应该会自动消失。为此,如果我给:

private void button1_Click(object sender, EventArgs e)
    {
     label1.Visible=true;
     label1.Text= "Magic";
     Thread.Sleep(3000);
     label1.Visible=false;
    }

此代码无助于达到目的。这样做的方法是什么?

4

4 回答 4

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() 绝不是一个好主意。改用计时器。

于 2012-07-25T11:34:31.737 回答
2

Create一个带有 3s的计时器Interval,启动它,并在您的计时器 Tick 事件中设置Visible为。false也不要忘记停止计时器。

永远不要调用Thread.Sleep你的 UI 线程:应用程序将被阻塞,因为 UI 线程在睡眠时不会接受消息(用户点击...)。

于 2012-07-25T11:32:53.790 回答
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();
}
于 2012-07-25T11:32:57.427 回答
1

使用 Timer,也许是 Windows.Forms.Timer。您可能必须在需要和不需要时启用和禁用它。您当前的方式没有帮助,因为您使主 UI 线程进入睡眠状态。没用。

于 2012-07-25T11:34:14.857 回答