diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-30 12:35:00 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-08-30 12:35:00 +0300 |
| commit | 7171e1a3b7579420f2060798c649088d70565401 (patch) | |
| tree | 5033e86d5ad91234194a1e0b2306a690d133cd11 /Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs | |
| parent | c7c4975fd0010fc666c467105a39b1cd93cb818d (diff) | |
| download | Tango-7171e1a3b7579420f2060798c649088d70565401.tar.gz Tango-7171e1a3b7579420f2060798c649088d70565401.zip | |
Implemented In-Memory Transport Adapter.
Implemented Embedded In-Memory Emulator.
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs b/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs index b12c48ded..317d0e249 100644 --- a/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs +++ b/Software/Visual_Studio/Tango.Core/SynchronizedObservableCollection.cs @@ -13,28 +13,31 @@ namespace Tango.Core { public class SynchronizedObservableCollection<T> : ObservableCollection<T> { - private static object _sync_lock = new object(); - private static object _modify_lock = new object(); + private object _sync_lock = new object(); + private object _modify_lock = new object(); + private SynchronizedObservableCollectionDispatcher _dispatcher; public SynchronizedObservableCollection() : base() { - BindingOperations.EnableCollectionSynchronization(this, _sync_lock); + _dispatcher = new SynchronizedObservableCollectionDispatcher(); + BindingOperations.EnableCollectionSynchronization(this, _modify_lock); } public SynchronizedObservableCollection(IEnumerable<T> collection) : base(collection) { - BindingOperations.EnableCollectionSynchronization(this, _sync_lock); + _dispatcher = new SynchronizedObservableCollectionDispatcher(); + BindingOperations.EnableCollectionSynchronization(this, _modify_lock); } protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { - SynchronizedObservableCollectionDispatcher.Invoke(() => + lock (_modify_lock) { - lock (_modify_lock) + _dispatcher.Invoke(() => { base.OnCollectionChanged(e); - } - }); + }); + } } protected override void InsertItem(int index, T item) @@ -62,11 +65,11 @@ namespace Tango.Core } } - internal static class SynchronizedObservableCollectionDispatcher + internal class SynchronizedObservableCollectionDispatcher { - internal static Dispatcher Dispatcher { get; set; } + internal Dispatcher Dispatcher { get; set; } - static SynchronizedObservableCollectionDispatcher() + internal SynchronizedObservableCollectionDispatcher() { if (Application.Current != null) { @@ -74,11 +77,11 @@ namespace Tango.Core } } - internal static void Invoke(Action action) + internal void Invoke(Action action) { if (Dispatcher != null) { - Dispatcher.BeginInvoke(action); + Dispatcher.Invoke(action); } else { |
