Nope. Any operation which takes time to complete (e.g. running some kind of animation) must be run on a separate thread. If it isn't, then the UI will become unresponsive for the duration of that operation, and won't paint properly either.
In the case of simple animation, it's specifically the waiting between each frame that needs to be delegated to another thread; the frame transitions can still (and probably need to) be done on the UI thread.
Looking at your code, I'm slightly confused as to how you're managing to access the form's controls from your worker thread without running into errors. You should only ever access forms/controls on the thread they were created on. For example, if you're setting a label from another thread, you shouldn't just do this:
Instead, you need to use code like this:
Code:
if (InvokeRequired)
{
MethodInvoker callback = () => someLabel.Text = "foo";
Invoke(callback);
}
else
{
someLabel.Text = "foo";
}
This will check whether the code needs to be invoked separately on the UI thread first, and then if it does, creates a delegate containing the code to execute, and passes it into Invoke for that delegate to be executed on the UI thread.
This will give a better explanation:
http://www.yoda.arachsys.com/csharp/threads/winforms.shtml