C # подождите 1 секунду - PullRequest
3 голосов
/ 26 июля 2011

Есть ли такая функция, как сон (секунды), но она не будет блокировать обновления пользовательского интерфейса? У меня есть код, подобный этому, и если я ставлю многопоточный сон после (letters.Children[Words[index].index] as TextBlock).Text = Words[index].LetterCorrect; (я хочу спать после этого), он просто ждет 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;

        letters.Children.Clear();
        LoadWord(++index);
        this.DataContext = Words[index];
    }
}

Ответы [ 5 ]

7 голосов
/ 26 июля 2011

Попробуйте таймер, и обратный вызов Elapsed выполнит код, который вы хотите получить через одну секунду.

4 голосов
/ 26 июля 2011

Создайте рабочий поток, который сделает всю работу за вас, и дайте этому потоку поспать в течение необходимого времени, прежде чем приступить к работе

например

ThreadPool.QueueUserWorkItem((state) =>
            {
                Thread.Sleep(1000);

                // do your work here
                // CAUTION: use Invoke where necessary
            });
1 голос
/ 26 июля 2011

Использовать асинхронный обратный вызов по расписанию:

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));
    }
}
1 голос
/ 26 июля 2011

Поместите саму логику в фоновый поток отдельно от потока пользовательского интерфейса и заставьте этот поток ждать.

Все, что находится в потоке пользовательского интерфейса, ожидающем 1 секунду, заблокирует весь поток пользовательского интерфейса на эту секунду.

0 голосов
/ 26 июля 2011

Не знаете, какую платформу вы используете, но если вы используете Silverlight или WPF, рассматривали ли вы возможность воспроизведения анимации , которая показывает правильную букву, или последовательность затухания, которая занимает 1000 мс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...