The reason this isn't working is because the Thread.Sleep() is blocking the thread from completing.
The window is only redrawn when the application is not doing anything, i.e. after your method completes. If you remove the line where you change it to DarkGreen
you will see it change colour after five seconds.
You should use a timer to solve your problem.
If you want, you can force it to refresh the interface early without leaving the method with a call to Application.DoEvents();
which will reflect changes you've made like colour changes.
button1.BackColor = Color.Lime;
Application.DoEvents()
Thread.Sleep(5000);
button1.BackColor = Color.DarkGreen;
Note that putting a Thread Sleep is a bad idea in a program with a user interface, but for illustration purposes it will show you how to make it change colour.