Yes, and there are many ways of doing it. The phrase you're looking for is Threading.
The easiest way to get started is to user a BackgroundWorker object:
string filesToUpload_etc = "files";
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork+= delegate(object sender, DoWorkEventArgs args)
{
foreach (string s in filesToUpload_etc.Split(''))
{
}
};
worker.RunWorkerCompleted+= delegate(object sender, RunWorkerCompletedEventArgs args)
{
};
worker.RunWorkerAsync();
This is dead easy to implement.
There are more complications if you want a progress report from another thread to the main thread that runs your forms. Dangers lie in have multiple threads trying to access the same variable, for example.
There are ways to get around almost all of these issues (I'm looking at you, Thread.Abort >_<<). I won't go into detail as I don't know how detailed you need. Just post a new question to address any of these complexities
Good luck :)