繁体   English   中英

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

[英]Sharing objects between a BackgroundWorker and main thread

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

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

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

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

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

如果您阅读本文,您将了解如何使用Dispatcher来完成您的操作而不违反线程 model。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM