0

我只想在 TextBlock 中短时间显示一条消息。我正在使用此代码

Label1.Text = "Wrong Password!";
System.Threading.Thread.Sleep(5000);
Label1.Text = " ";

但这不起作用,如果有人有其他更好的逻辑,请回答!

4

1 回答 1

1

上面的代码将使 UI 线程休眠,所以本质上是这样的:

  1. 请求将标签文本设置为“密码错误!” (直到下一个 UI 线程打勾才更新)
  2. 睡眠 5 秒
  3. 请求将标签文本设置为“”
  4. UI线程滴答,标签设置为“”

要解决此问题,请执行以下操作:

Label1.Text = "Wrong Password!";

// start a new background thread
new Thread(new ThreadStart(() =>
{
    Thread.Sleep(5000);

    // interacting with Control properties must be done on the UI thread
    // use the Dispatcher to queue some code up to be run on the UI thread
    Dispatcher.BeginInvoke(() =>
    {
        Label1.Text = " ";
    });
})).Start();

这将:

  1. 请求将标签文本设置为“密码错误!”
  2. 启动一个休眠 5000 毫秒的不同线程
  3. 与此同时,UI 线程继续执行,因此标签更新为“密码错误!”
  4. 5000ms过去,后台请求清除标签文本
  5. UI 线程滴答并更新标签
于 2013-06-17T20:17:06.280 回答