gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:28:24 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

关于c# - 在 BackgroundWorker 和主线程之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com