mak_ufo
@mak_ufo

Почему так странно блокируется поток?

Столкнулся с проблемой. Поток как-то странно блокируется. Код такой:

LambdaMechanism Mech = new LambdaMechanism(Angle, Radius);
Mech.Draw(canvas);
Thread.Sleep(TimeSpan.FromSeconds(3));
MessageBox.Show("Yes");


По моей логике этот код должен отрисовывать нужные элементы, а потом через 3 секунды выводить Yes на экран. Но по факту после запуска через 3 секунды одновременно рисуются элементы и выводится Yes на экран. В чём проблема? Внутри Mech.Draw() не затрагиваются потоки, таймеры и пр.

P. S. Я знаю, что можно сделать так:
Task.Delay(3000).ContinueWith(_ => MessageBox.Show("Yes"))
Но такой вариант мне не подходит. Нужно именно "застопить" выполнение кода на 3 секунды
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
AnotherAltr
@AnotherAltr
C# Dev
Ты усыпляешь UIThread.
А так делать нельзя.
Тебе придется создать новый поток и остановить его на 3 секунды, после чего вывести Yes.

LambdaMechanism Mech = new LambdaMechanism(Angle, Radius);
Mech.Draw(canvas);
new Thread(()=> 
{
Thread.Sleep(TimeSpan.FromSeconds(3));
MessageBox.Show("Yes");
}).Start();


Как вариант.
Ну или:
await Task.Delay(3000).ContinueWith(_ => MessageBox.Show("Yes"))

Вроде так

Графический поток отрисовывает элементы не моментально.
А ты усыпляешь его, и он конечно же не успевает отрисовать то что тебе нужно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы