C# Task - Aufrufende Thread kann nicht auf dieses Objekt zugreifen, wo liegt der Fehler?
Das ist meine zweite Multithreading Anwendung. Ich habe mir diesen Code aus meinem ersten Versuch kopiert und angepasst.
Dort lief alles nach Plan. Leider kann ich in diesem Projekt das nicht so verwenden, aber ich kann auch keine gute Lösung für den Fehler Code finden.
Hier der Code
System.InvalidOperationException: "Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet"
Dieser Fehler kommt in Zeile 52 des Pastebins.
Was mich verwundert wieso dieser Code so bei einer ListView mit ListViewItems ging, aber nicht bei der ComboBox.
Wie kann ich diesen Fehler beheben?
2 Antworten
Du kannst nicht gleichzeitig von 2 threads aus auf die gleiche Collection zugreifen.
Du kannst durchaus auch mit Synchronisierten Collections arbeiten, so arbeitet jeder Tread mit seiner Collection, welche jedoch sozusagen siamesische Zwillinge sind.
andere Workarounds:
https://stackoverflow.com/questions/23108045/how-to-make-observablecollection-thread-safe
https://entwickler.de/online/wpf-4-5-cross-thread-collection-synchronization-156810.html
Wenn ein Task eine Variable oder ein Objekt bearbeitet / ,,in der Hand hat", haben andere Tasks nicht dazwischen zu funken. Die simpelste Lösung wäre es, dass du den Code wo die Exception auftritt lockst:
object o;
lock(o)
{
//Code wo die Exception kommt
}
Das wird aber wahrscheinlich deinen Code etwas verlangsamen, da das lock sozusagen die Variable sperrt und andere Threads dann damit nicht weiterarbeiten können. Hast du schon mal probiert, Dispatcher.Invoke anstatt Dispatcher.BeginInvoke zu verwenden? Ich weiß auch nicht ganz, warum du für alles Actions verwendest, das müsste auch mit der Task Klasse funktionieren