gpt4 book ai didi

c# - 无法从另一个线程访问对象

转载 作者:行者123 更新时间:2023-11-30 15:36:38 24 4
gpt4 key购买 nike

我知道这已经在其他问题上进行了讨论,但我在这里拉扯我的头发 - 显然遗漏了一些明显的东西。我将尝试为您提供一些背景信息,所以这里...

我有一个卡住的 UI 线程,所以我创建了一个后台工作程序来执行所有繁重的处理以保持我的 UI 交互。

我需要为一些弧线/路径生成坐标,然后将其绘制在 Canvas 上。后台 worker 处理并运行它的工作完成方法,它将 PathGeometry 与列表中的一些其他数据一起存储。然后,我使用我传递给后台工作程序的对象在我的 UI 线程中调用了一个 update() 方法。

我的问题是,当我开始在 UI 线程中构建 Path 对象时(它不允许我在后台工作线程中构建它们),我无法访问 PathGeometries。我的对象是一个 CommunicationArc,它包含 PathGeometry、不透明度、颜色等。

The calling thread cannot access this object because a different thread owns it.

我可以访问对象的其他部分,但不能 PathGeometry,我不知道为什么。 backgroundworker 肯定已经完成,因为 workcomplete 方法已经运行并且 Arcs 都存储在我的列表中。我只是想在我的 UI 线程中读取弧线,对它们进行更多处理,然后继续绘制它们。

我试过像这样从我的 UI 线程使用 Dispatcher:

arc.pathGeometry.Dispatcher.BeginInvoke((Action)(() =>
{
MessageBox.Show(arc.pathGeometry.ToString());
}));

但我不确定我正在做的事情是否正确,调用 Dispatcher 的各种方法要么不做任何事情,要么将所有内容锁定在 BeginInvoke() 上。

任何帮助都会很棒,我觉得我在这里兜圈子!

最佳答案

您需要直接在 UI 线程上创建和操作几何对象。您执行的任何线程处理都不能直接访问几何对象,它们必须分派(dispatch)给创建它们的线程 - UI 线程。

关于c# - 无法从另一个线程访问对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557192/

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