Поскольку это WPF, вы можете использовать Dispatcher и вызвать Dispatcher.BeginInvoke
, чтобы перенаправить вызов обратно в поток пользовательского интерфейса для обновления метки.
Кроме того, вы можете передать TaskScheduler в ваш метод и использовать его для обновления метки следующим образом:
// This line needs to happen on the UI thread...
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew( () => RecurseAndDeleteStart(uiScheduler) );
Затем, внутри вашего метода, когда вы хотите обновить метку, вы можете сделать:
Task.Factory.StartNew( () =>
{
theLabel.Text = "Foo";
}, CancellationToken.None, TaskCreationOptions.None, uiScheduler);
Это вернет вызов обратно в контекст синхронизации потока пользовательского интерфейса.