0

我有一个名为 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);
    }
}

在这里我收到一个错误:调用线程无法访问此对象,因为不同的线程拥有它。欢迎帮助,谢谢!

4

1 回答 1

2

如果您在ImageSource后台线程上创建了 ,请确保将其冻结,以便可以从任何线程访问它:

var imageSource = ...;
imageSource.Freeze();
于 2012-07-02T06:38:39.813 回答