【问题标题】:c# wpf run button click on new threadc# wpf运行按钮点击新线程
【发布时间】:2015-12-13 17:02:59
【问题描述】:

在我的 WPF、.Net 4.5 应用程序中,我有一些长时间运行的任务发生在用户交互之后。

例如,如果用户单击按钮,在单独的线程上运行按钮操作的最佳方式是什么,以便用户可以在处理完成时继续与应用程序交互?

【问题讨论】:

  • 按钮单击将始终在 UI 线程中运行。寻找一些多线程教程,例如 MSDN 中的this one

标签: c# .net wpf multithreading


【解决方案1】:

对于长时间运行的任务,您可以使用 async/await。它旨在取代后台工作人员构造,但这完全取决于个人喜好。

这是一个例子:

private int DoThis()
{
      for (int i = 0; i != 10000000; ++i) { }
      return 42;
}

public async void ButtonClick(object sender, EventArgs e)
{
    await Task.Run(() => DoThis());
} 

这样的事情不会在任务完成时锁定 UI。

【讨论】:

  • 天才。我♥ OneLiners。 可能是一个 T 恤的口号来对抗这个 I ♥ preferedCityHere 家伙!
【解决方案2】:

使用BackgroundWorker 类。您需要将代码移动到工作人员并从按钮调用它的运行功能。 Here is a nice answer on StackOverflow on how to use it.

【讨论】:

    【解决方案3】:

    一种方法是使用 TPL(任务并行库)。这是一篇关于代码项目的文章,关于Using TPL in WPF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      相关资源
      最近更新 更多