【发布时间】:2016-08-30 06:23:37
【问题描述】:
以下案例
按下按钮
显示文本框“订购成功”
延迟 2 秒仍显示文字
延迟结束,文本更改/消失为“放置您的筹码”
问题:
使用 Thread Sleep 会在显示文本之前冻结整个 UI,延迟后仅显示第二个文本。有趣的是,我在更改文本后播放的声音会播放但没有显示文本。
使用 Task (async/delay/await),它不会等待延迟,而是连续显示两者,因此第一个文本很短的时间,然后立即更改为第二个文本。
使用任务(等待)程序崩溃。
使用 Timer 与使用 Task 具有相同的效果(异步或/和延迟)。
使用 while (time, 2nd time with +2seconds) 现在只是将新时间推入时间,如果时间结束,它就完成了,但与线程睡眠具有相同的效果 - 整个 UI 冻结。
也许有趣的是,有计时器一直在后台运行。
我尝试了很多我在这里找到的版本,但没有一个有效 - 也许它与 WPF 有关,所以我现在问是否有人有 WPF 延迟的解决方案。
代码
private void SendWithDelay()
{
// close(); // Sets text back to "place your chip" but for here:
tbPlace.Text = "Place your chip";
}
private void changeVisibilityForDelay()
{
// called by pressed button
tbPlace.Text = "Successfully ordered";
tbPlace.Visibility = Visibility.Visible;
Task.Delay(2000).ContinueWith(t => SendWithDelay(), TaskScheduler.FromCurrentSynchronizationContext());
}
【问题讨论】:
-
MCVE @ASh 表示最小、完整和可验证的示例:stackoverflow.com/help/mcve
-
抱歉,添加了一个我试过的例子
标签: c# wpf user-interface task delay