public static Task StartTask(string caption, System.Action action)
{
var cts = new CancellationTokenSource();
var task = Task.Factory.StartNew(action, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
var tw = new TaskForm(task, cts) { Text = caption };
tw.Show();
return task;
}