hallo,
ich verstehe eine exception die mir der compiler wirft nicht ganz:
"der aufgerufene thread kann nicht auf dieses obekt zugreifen, da sich das objekt im besitz eines anderen threads befindet"
dies is des quelltext eines fensters des media players. was im prinzip passieren soll ist, dass sobald die methode Refresh() aufgerufen wird, soll im hintergrund information aus dem netz geladen werden und sobald sie fertig ist mit dem download soll sie in den feldern Lyrics / Description und Cover angezeigt werden. das downloaden im hintergrund funktioniert einwandfrei, auch das zuweisen des return wertes des hinergrundthreads an das lokale objekt infoWrapper funktioniert. allerdings sobald ich in irgend einer form versuche auf die felder Lyrics.text etc schreibend zuzugreifen, wird immer obige exception geworfen.
hat irgend jemand vielleicht eine idee woran das liegen könnte?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| public partial class Info { private Window1 mainWindow; private PeerPlayerCore qpCore;
private delegate InfoWrapper del_Refresher(); private static del_Refresher invoker; private InfoWrapper infoWrapper;
public Info(Window1 mainWindow, PeerPlayerCore qpCore) { this.InitializeComponent();
this.mainWindow = mainWindow; this.ShowInTaskbar = false; this.qpCore = qpCore;
infoWrapper = new InfoWrapper();
}
private void Move(object sender, System.Windows.Input.MouseButtonEventArgs e) { this.DragMove(); }
private void Btn_Close_Click(object sender, RoutedEventArgs e) { this.Visibility = Visibility.Collapsed; mainWindow.Vis_infoWindow = false; }
public void Refresh() { invoker = new del_Refresher(this.InvokedRefresh);
AsyncCallback callback = new AsyncCallback(this.InvokeCallback); invoker.BeginInvoke(callback,null); }
private InfoWrapper InvokedRefresh() { InfoWrapper return_infoWrapper = new InfoWrapper();
return return_infoWrapper; }
private void InvokeCallback(IAsyncResult ar) { infoWrapper = invoker.EndInvoke(ar); this.Lyrics.Text = infoWrapper.lyrics; this.Description.Text = infoWrapper.description; this.Cover.Source = infoWrapper.image; }
} |
meint dieseexception jetzt, dass sich Lyrics etc im vesitz des fenster-threads befindet und ich mit dem hintergrundthread nicht darauf zugreifen darf? wenn ja, weis vielleicht jemand einen workaround, oder hat jemand eine idee? vielleicht mache ich auch prinzipiell etwas beim benutzen der threads falsch...
vielen dank schonmal und
greetz
tom
Moderiert von Christian S.: Code- durch C#-Tags ersetzt