Por qué es Thread. Dormir tan dañino

A menudo veo que mencionó queThread.Sleep(); no debe usarse, pero no puedo entender por qué es así. SiThread.Sleep(); puede causar problemas, ¿hay alguna solución alternativa con el mismo resultado que sea segura?

p.ej

while(true)
{
    doSomework();
    i++;
    Thread.Sleep(5000);
}

otro es:

while (true)
{
    string[] images = Directory.GetFiles(@"C:\Dir", "*.png");

    foreach (string image in images)
    {
        this.Invoke(() => this.Enabled = true);
        pictureBox1.Image = new Bitmap(image);
        Thread.Sleep(1000);
    }
}

Respuestas a la pregunta(14)

Su respuesta a la pregunta