diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-05-23 15:56:52 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2021-05-23 15:56:52 +0300 |
| commit | 98a07a369f2dcf849b4b571ac269b4bff92b03d5 (patch) | |
| tree | 33ea2b9063daba34ae4be14ab52c47c435b704be /Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs | |
| parent | 59337c44830916d106ee98e892f7c3f95780a011 (diff) | |
| download | Tango-98a07a369f2dcf849b4b571ac269b4bff92b03d5.tar.gz Tango-98a07a369f2dcf849b4b571ac269b4bff92b03d5.zip | |
SynchronizedObservableCollection fix on machine service.
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(); } |
