diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs b/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs index 317d0e249..e4deec540 100644 --- a/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs +++ b/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs @@ -11,38 +11,65 @@ using System.Windows.Threading; namespace Tango.Core { + public static class SynchronizedObservableCollectionConfig + { + public static bool DisableSynchronization { get; set; } + } + public class SynchronizedObservableCollection<T> : ObservableCollection<T> { private object _sync_lock = new object(); private object _modify_lock = new object(); private SynchronizedObservableCollectionDispatcher _dispatcher; + public bool DisableSynchronization { get; set; } = SynchronizedObservableCollectionConfig.DisableSynchronization; + public SynchronizedObservableCollection() : base() { - _dispatcher = new SynchronizedObservableCollectionDispatcher(); - BindingOperations.EnableCollectionSynchronization(this, _modify_lock); + if (!DisableSynchronization) + { + _dispatcher = new SynchronizedObservableCollectionDispatcher(); + BindingOperations.EnableCollectionSynchronization(this, _modify_lock); + } } public SynchronizedObservableCollection(IEnumerable<T> collection) : base(collection) { - _dispatcher = new SynchronizedObservableCollectionDispatcher(); - BindingOperations.EnableCollectionSynchronization(this, _modify_lock); + if (!DisableSynchronization) + { + _dispatcher = new SynchronizedObservableCollectionDispatcher(); + BindingOperations.EnableCollectionSynchronization(this, _modify_lock); + } } protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { - lock (_modify_lock) + if (!DisableSynchronization) { - _dispatcher.Invoke(() => + lock (_modify_lock) { - base.OnCollectionChanged(e); - }); + _dispatcher.Invoke(() => + { + base.OnCollectionChanged(e); + }); + } + } + else + { + base.OnCollectionChanged(e); } } protected override void InsertItem(int index, T item) { - lock (_modify_lock) + if (!DisableSynchronization) + { + lock (_modify_lock) + { + base.InsertItem(index, item); + } + } + else { base.InsertItem(index, item); } @@ -50,7 +77,14 @@ namespace Tango.Core protected override void RemoveItem(int index) { - lock (_modify_lock) + if (!DisableSynchronization) + { + lock (_modify_lock) + { + base.RemoveItem(index); + } + } + else { base.RemoveItem(index); } @@ -58,7 +92,14 @@ namespace Tango.Core protected override void ClearItems() { - lock (_modify_lock) + if (!DisableSynchronization) + { + lock (_modify_lock) + { + base.ClearItems(); + } + } + else { base.ClearItems(); } |
