Since it's WPF, you can use the Dispatcher and call Dispatcher.BeginInvoke
to marshal the call back to the UI thread to update the label.
Alternatively, you can pass a TaskScheduler into your method, and use it to update the label as follows:
// This line needs to happen on the UI thread...
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew( () => RecurseAndDeleteStart(uiScheduler) );
Then, inside your method, when you want to update a label, you could do:
Task.Factory.StartNew( () =>
{
theLabel.Text = "Foo";
}, CancellationToken.None, TaskCreationOptions.None, uiScheduler);
This will push the call back onto the UI thread's synchronization context.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…