0

GUI.xamlというWPFUIがあり、他のクラスのラベルと画像を変更する必要があります。さらに、長いタスクを実行する必要があるため、バックグラウンドワーカーを使用しています。だから私はこのサイトで解決策を読んだ:

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 に答える