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);
}
}
ここでエラーが発生します。別のスレッドがオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。ヘルプは大歓迎です、ありがとう!