我有一个名为GUI.xaml的WPF UI,我需要更改其他类的标签和图像。更多我需要执行一项长任务,所以我正在使用后台工作人员。所以我在这个网站上看到了一个解决方案:
在GUI.xaml.cs中:
public static ChangeGUI someClass;
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
someClass = new ChangeGUI(this); //
TaskClass.ConnectionThread(SuperHero.getUserID());
}
在ChangeGUI.cs中:
public class ChangeGUI
{
GUI _GUIRef;
public ChangeGUI(GUI gui)
{
_GUIRef = gui;
}
public void ChangeLabel()
{
//here we can play with labels
}
public void ChangeMap(ImageSource tmp)
{
if (_GUIRef.image1.Dispatcher.CheckAccess())
_GUIRef.image1.Source = tmp;//ERROR!!!!!!!!!!!!!!
else
_GUIRef.image1.Dispatcher.Invoke(new Changer(ChangeMap), tmp);
}
}
这里我收到一个错误:调用线程无法访问此对象,因为另一个线程拥有它。 欢迎帮助, 谢谢!
答案 0 :(得分:2)
如果您在后台线程中创建了ImageSource
,请确保将其冻结,以便可以从任何线程访问:
var imageSource = ...;
imageSource.Freeze();