Ты усыпляешь 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"))
Вроде так
Графический поток отрисовывает элементы не моментально.
А ты усыпляешь его, и он конечно же не успевает отрисовать то что тебе нужно.