c#等一秒钟

本文关键字:一秒钟 | 更新日期: 2023-09-27 18:03:41

是否有像睡眠(秒)这样的功能,但它不会阻止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];
    }
}

c#等一秒钟

尝试一个Timer并让Elapsed回调函数在一秒后执行您想要发生的代码。

创建一个为您工作的工作线程,并让该线程在开始工作之前休眠所需的时间

ThreadPool.QueueUserWorkItem((state) =>
            {
                Thread.Sleep(1000);
                // do your work here
                // CAUTION: use Invoke where necessary
            });

将逻辑本身置于与UI线程分开的后台线程中,并让该线程等待。

UI线程中等待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;
        Scheduler.ThreadPool.Schedule(schedule =>
        {
           letters.Children.Clear();
           LoadWord(++index);
           this.DataContext = Words[index];
        }, TimeSpan.FromSeconds(1));
    }
}

不确定您使用的是什么框架,但如果您使用的是Silverlight或WPF,您是否考虑过播放显示正确字母的动画或需要1000ms的褪色序列?