【问题标题】:.net multithreading?.net 多线程?
【发布时间】:2011-08-13 07:03:50
【问题描述】:

我多次尝试使用多个 .net 方法进行多线程处理。我每次都遇到同样的问题,那就是尝试从另一个线程更改 UI 属性。

我在网上看到BackgroundWorker 有一个特殊的事件,可以用来将信息传递回主线程。在尝试之后,它非常不可靠,看起来像是一个廉价的黑客。我非常失望。我找不到任何关于此的信息。

有什么想法吗?

【问题讨论】:

标签: .net multithreading backgroundworker


【解决方案1】:

这并不是真正特定于 .NET,甚至。许多用户界面框架都有线程亲和性。

有许多替代方法可以使用 BackgroundWorker,包括用于 Windows 窗体的 Control.BeginInvoke 或使用用于 WPF 或 Silverlight 的 Dispatcher

如果您使用的是 .NET 4,您还可以使用 TaskScheduler.FromCurrentSynchronizationContext 在 UI 线程的同步上下文中执行任何 Task

【讨论】:

    【解决方案2】:

    后台工作人员的事件驱动并不是廉价的黑客攻击。

    但是,如果您确实想自己进行更新,则需要使用 Control.Invoke 方法来加入 UI 线程进行更新。

    您最终会在代码中到处乱扔if (control.InvokeRequired),因此我建议您使用扩展方法,详见另一篇文章:

    Cleaning up code littered with InvokeRequired

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2011-03-30
      • 2011-06-08
      • 2010-10-02
      相关资源
      最近更新 更多