C# Task - Aufrufende Thread kann nicht auf dieses Objekt zugreifen, wo liegt der Fehler?

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.

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.synchronizedcollection-1?view=netframework-4.8

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

https://code-examples.net/en/q/16099cd

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