在BackgroundWorker和主线程之间共享对象

问题描述 投票:5回答:1

我的主线程(WPF应用程序)中有一个ListBox对象。为什么我无法在BackgroundWorker线程中访问它。据我所知,每个线程的堆栈是分开的,但堆很常见。不是在堆中创建ListBox对象。在那种情况下,为什么它无法访问。我尝试将ListBox引用作为参数传递,并尝试在BackgroundWorker中访问其内容。在线程之间共享对象的概念是否与C ++不同?

c# wpf backgroundworker
1个回答
10
投票

与WinForms一样,WPF的设计通过仅从创建它们的线程访问所有用户界面元素的要求而大大简化。

当您尝试编写多线程程序时,这个“功能”似乎是一个严重的限制。甚至不能直接从后台线程修改用户界面元素的最简单属性。如果是这样,我们如何在WPF中使用后台线程呢?

答案是我们必须将用于用户界面的操作转换为可以在不冲突的情况下执行工作的前台线程。更严格地说,我们必须让我们的动作在创建我们试图修改的元素的线程的上下文中执行。

WPF中的线程主题很大,但这是一篇很好的介绍性文章:

如果您阅读本文,您将看到如何使用Dispatcher完成您的操作,而不会违反线程模型。

© www.soinside.com 2019 - 2024. All rights reserved.