我知道这个问题在其他问题中已经讨论过了,但是我正在苦恼——显然我错过了一些明显的东西。我会尝试为您提供一些背景信息……
我有一个UI线程,它冻结了,所以我创建了一个后台工作程序来处理所有繁重的处理任务,以保持我的UI交互性。
我需要为一些弧线/路径生成坐标,然后将其绘制在画布上。后台工作程序处理并运行其完成工作的方法,在其中将PathGeometry与一些其他数据存储在列表中。然后,我从我的后台工作程序中调用了一个update()方法,在UI线程中使用我传递给后台工作程序的对象。
我的问题是,当我开始在UI线程中构建Path对象(无法在后台工作程序线程中构建它们)时,我无法访问PathGeometries。我的对象是一个CommunicationArc,它包含PathGeometry、不透明度、颜色等信息。
我有一个UI线程,它冻结了,所以我创建了一个后台工作程序来处理所有繁重的处理任务,以保持我的UI交互性。
我需要为一些弧线/路径生成坐标,然后将其绘制在画布上。后台工作程序处理并运行其完成工作的方法,在其中将PathGeometry与一些其他数据存储在列表中。然后,我从我的后台工作程序中调用了一个update()方法,在UI线程中使用我传递给后台工作程序的对象。
我的问题是,当我开始在UI线程中构建Path对象(无法在后台工作程序线程中构建它们)时,我无法访问PathGeometries。我的对象是一个CommunicationArc,它包含PathGeometry、不透明度、颜色等信息。
The calling thread cannot access this object because a different thread owns it.
我可以访问对象的其他部分,但是无法访问PathGeometry,我不知道为什么。后台工作程序肯定已经完成,因为workcomplete方法已经运行并且所有的弧都存储在我的列表中。我只想在UI线程中读取这些弧,稍微处理一下,然后继续绘制它们。
我尝试使用来自我的UI线程的Dispatcher:
arc.pathGeometry.Dispatcher.BeginInvoke((Action)(() =>
{
MessageBox.Show(arc.pathGeometry.ToString());
}));
但我不确定我所做的是否正确,各种调用Dispatcher的方法要么没有任何效果,要么会锁定BeginInvoke()上的所有内容。
任何帮助都将不胜感激,我感觉自己正在打转!