In the modern level of technology is used await. If this is not possible, at least simplify the code for one call Invoke. No need to reference each control, just call anywhere in the user interface thread.
InvokeRequired , , .
, "Current state: " + e.Step, , , .
Application.DoEvents - . , , , Invoke, ?! .
lstStatus.Refresh(); , , . ( ).