是否有像睡眠(秒)这样的功能,但它不会阻止UI更新?
我有一个像这样的代码,如果我在(letters.Children[Words[index].index] as TextBlock).Text = Words[index].LetterCorrect;
之后放入线程睡眠(之后我想睡觉)它只等待1秒然后UI得到更新,但我不想要那个。
private void Grid_Click(object sender, RoutedEventArgs e)
{
if (index == Words.Count() - 1) return;
if ((((e.Source as Button).Content as Viewbox).Child as Label).Content.ToString() == Words[index].LetterCorrect)
{
(letters.Children[Words[index].index] as TextBlock).Text = Words[index].LetterCorrect;
letters.Children.Clear();
LoadWord(++index);
this.DataContext = Words[index];
}
}
答案 0 :(得分:7)
尝试一个计时器并让Elapsed回调执行你想要在一秒钟后发生的代码。
答案 1 :(得分:4)
创建一个工作线程,为您完成工作并让该线程在上班前睡眠所需的时间
e.g。
ThreadPool.QueueUserWorkItem((state) =>
{
Thread.Sleep(1000);
// do your work here
// CAUTION: use Invoke where necessary
});
答案 2 :(得分:1)
将逻辑本身放在与UI线程分开的后台线程中,让该线程等待。
UI线程中等待1秒的任何内容都将锁定整个UI线程。
答案 3 :(得分:1)
使用异步预定回调:
private void Grid_Click(object sender, RoutedEventArgs e)
{
if (index == Words.Count() - 1) return;
if ((((e.Source as Button).Content as Viewbox).Child as Label).Content.ToString() == Words[index].LetterCorrect)
{
(letters.Children[Words[index].index] as TextBlock).Text = Words[index].LetterCorrect;
Scheduler.ThreadPool.Schedule(schedule =>
{
letters.Children.Clear();
LoadWord(++index);
this.DataContext = Words[index];
}, TimeSpan.FromSeconds(1));
}
}
答案 4 :(得分:0)
不确定您使用的是哪种框架,但是如果您使用的是Silverlight或WPF,您是否考虑过播放显示正确字母的animation或执行需要1000毫秒的淡入淡出序列?