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

标签 c# wpf multithreading task-parallel-library

我正在尝试让我的 UI 在我的 WPF 应用程序中更具响应性。我使用

生成了一个新线程
Task.Factory.StartNew( () => RecurseAndDeleteStart() );

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

如何做到这一点?

最佳答案

由于它是 WPF,您可以使用 Dispatcher 并调用 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 线程的同步上下文。

关于c# - 使用 Task.Factory.StartNew 时更新 UI 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075998/

相关文章:

c++ - 使用 Boost C++ 的多线程 - 同步问题

c# - WPF 根据内容将标签背景设置为图像

c# - 对具有相同长度的大量字符串进行排序

c# - PostAsJson JsonArray C# Web API

c# - 如何更改 3D 对象的不透明度值

c# - WPF框架如何处理MVVM中属性的循环更新?

c# - XAML 菜单项可见但不可选择?

c# - 确定的日期时间还剩 4 分钟时启用按钮

java - 使用 Mqtt 订阅者与主类通信

c# - 多线程不处理所有任务