使用Task.Factory.StartNew时更新UI标签

我试图在我的WPF应用程序中使我的UI更具响应性。 我使用生成一个新线程

Task.Factory.StartNew( () => RecurseAndDeleteStart() ); 

在该方法RecurseAndDeleteStart()我想使用正在删除的文件更新UI中的标签。

如何实现这一目标?

由于它是WPF,您可以使用Dispatcher并调用Dispatcher.BeginInvoke将调用Dispatcher.BeginInvoke送回UI线程以更新标签。

或者,您可以将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); 

这会将调用推回到UI线程的同步上下文中。

您必须使用label.Dispatcher.BeginInvoke(delegate)来调用将更改标签内容的其他线程中的任何内容。