我知道这已经在其他问题上进行了讨论,但我在这里把头发拉出来——显然遗漏了一些明显的东西。我会尽量给你一些背景信息,所以这里......
我有一个正在冻结的 UI 线程,所以我创建了一个后台工作程序来执行所有繁重的处理以保持我的 UI 交互。
我需要为一些弧/路径生成坐标,然后在画布上绘制。后台工作人员处理并运行它的工作完成方法,它将 PathGeometry 与其他一些数据一起存储在一个列表中。然后,我在我的 UI 线程中调用了一个 update() 方法,从我的 backgroundworker,使用我传递给 backgroundworker 的对象。
我的问题是,当我开始在 UI 线程中构建 Path 对象(它不允许我在后台工作线程中构建它们)时,我无法访问 PathGeometries。我的对象是一个 CommunicationArc,它包含 PathGeometry、不透明度、颜色等。
The calling thread cannot access this object because a different thread owns it.
我可以访问对象的其他部分,但不能访问 PathGeometry,我不知道为什么。随着 workcomplete 方法的运行,backgroundworker 肯定已经完成,并且 Arcs 都存储在我的列表中。我只是想在我的 UI 线程中读取弧线,对它们进行更多处理,然后继续绘制它们。
我曾尝试使用我的 UI 线程中的 Dispatcher,如下所示:
arc.pathGeometry.Dispatcher.BeginInvoke((Action)(() =>
{
MessageBox.Show(arc.pathGeometry.ToString());
}));
但是我不确定我所做的是否正确,调用 Dispatcher 的各种方法要么不做任何事情,要么将所有内容锁定在 BeginInvoke() 上。
任何帮助都会很棒,我觉得我在这里绕圈子!