【问题标题】:Backgroundworker for WPF? [duplicate]WPF的后台工作人员? [复制]
【发布时间】:2015-03-11 13:58:44
【问题描述】:

我曾经在一些旧的 Windows 窗体应用程序中使用 BackgroundWorker。现在尝试 WPF/XAML 我在工具箱中看不到它。本质上,我想在不占用 GUI 线程的情况下进行一些大型数据库查询。 WPF 中的首选方法是什么?

【问题讨论】:

  • 后台工作仍在 WPF 中。您将在模型中使用它来执行长时间运行的查询。所以这次都是通过代码来实例化的。有很多关于使用它的例子,还有一些很好的教程:-)
  • 如果您的目标是 .Net 4.5,我会推荐一种异步方法,这是一个 WPF 示例:codearsenal.net/2012/11/…
  • 您可以使用 C#-5.0 中提供的基于任务的异步模式
  • 我不同意这个副本。 WPF 中异步数据库查询的首选方法是真正的问题。

标签: c# wpf xaml


【解决方案1】:

BackgroundWorker 是 .NET - 它仍然存在于 WPF 中。

ADO 支持异步回调

AsyncCallback callback = new AsyncCallback(HandleCallback);
// Once the BeginExecuteNonQuery method is called,
// the code continues--and the user can interact with
// the form--while the server executes the query.
command.BeginExecuteNonQuery(callback, command);

Windows Applications Using Callbacks (ADO.NET)

【讨论】:

    【解决方案2】:

    没有首选方法。

    您可以使用 TPL 调用、BackgroundWorker 甚至是普通的异步方法。

    这里的关键是对 UI 对象的任何更新,就像在 WinForms 中一样,需要在正确的线程上调用。这是通过Dispatcher.Invoke() 调用完成的。

    【讨论】:

    • 在不同线程上更新 UI 对象的普遍看法是什么?如果可以的话,我会尽量避免它,只是感觉不对。
    • 视情况而定。如果您有一个长时间运行的进程报告进度,如果您希望在无限期的 ProgressBar/BusyIndi​​cator 之外向用户发送有意义的通知,那么您别无选择,只能从该特定线程更新 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多