What you would do is make your method async, which will allow you to use a method called Task.Delay, which resembles Thread.Sleep, but instead of putting the thread to sleep, it returns control back to the calling method and returns after the amount of time specified has finished.
What this would require you to do is mark your method as async:
async Task FooMethod
and inside your code, you would use:
private async void AwesomeButton_Click(object sender, EventArgs e)
{
doorLocked.FillColor = Color.Red;
doorLight.FillColor = Color.SpringGreen;
doorLockedImage.Visible = true;
var cancellationToken = new CancellationTokenSource().Token;
await Task.Delay(AmountOfMillisecondsHere, cancellationToken);
}
Then, you can call cancellationToken.Cancel() to abort the Task.