dotnet add package Cogs.Collections.Synchronized --version 1.7.0
NuGet\Install-Package Cogs.Collections.Synchronized -Version 1.7.0
<PackageReference Include="Cogs.Collections.Synchronized" Version="1.7.0" />
paket add Cogs.Collections.Synchronized --version 1.7.0
#r "nuget: Cogs.Collections.Synchronized, 1.7.0"
// Install Cogs.Collections.Synchronized as a Cake Addin #addin nuget:?package=Cogs.Collections.Synchronized&version=1.7.0 // Install Cogs.Collections.Synchronized as a Cake Tool #tool nuget:?package=Cogs.Collections.Synchronized&version=1.7.0
Good idea: binding UI elements to observable collections. Bad idea: manipulating observable collections bound to UI elements from background threads. Why? Because the collection change notification event handlers will be executed on non-UI threads, which cannot safely manipulate the UI. So, I guess we need to carefully marshal calls over to the UI thread whenever we manipulate or even read those observable collections, right?
SynchronizedObservableDictionary<TKey, TValue>, and
SynchronizedObservableSortedDictionary<TKey, TValue> classes. Create them on UI threads. Or, pass the UI thread's synchronization context to their constructors. Then, any time they are touched, the call is marshalled to the context of the appropriate thread. They even include async alternatives to every method and indexer just in case you would like to be well-behaved and not block worker threads just because the UI thread is busy.
I mean, no judgment. We just don't like sending threads to thread jail.
Last, but not least, each of them also has an array of range methods to handle performing multiple operations at once when you know you'll need to in advanced and would like to avoid O(2n) context switching.
|Product||Versions Compatible and additional computed target framework versions.|
|.NET||net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed.|
|.NET Core||netcoreapp3.0 was computed. netcoreapp3.1 was computed.|
|.NET Standard||netstandard2.1 is compatible.|
|MonoAndroid||monoandroid was computed.|
|MonoMac||monomac was computed.|
|MonoTouch||monotouch was computed.|
|Tizen||tizen60 was computed.|
|Xamarin.iOS||xamarinios was computed.|
|Xamarin.Mac||xamarinmac was computed.|
|Xamarin.TVOS||xamarintvos was computed.|
|Xamarin.WatchOS||xamarinwatchos was computed.|
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Cogs.Collections.Synchronized:
Cogs for active queries.
This package is not used by any popular GitHub repositories.
Non-abstract classes sealed for performance.