38 lines
1.4 KiB
C#
38 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.Specialized;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Threading;
|
|
|
|
namespace Piston
|
|
{
|
|
public class MTObservableCollection<T> : ObservableCollection<T>
|
|
{
|
|
public override event NotifyCollectionChangedEventHandler CollectionChanged;
|
|
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
|
|
{
|
|
NotifyCollectionChangedEventHandler collectionChanged = CollectionChanged;
|
|
if (collectionChanged != null)
|
|
foreach (NotifyCollectionChangedEventHandler nh in collectionChanged.GetInvocationList())
|
|
{
|
|
var dispObj = nh.Target as DispatcherObject;
|
|
|
|
Dispatcher dispatcher = dispObj?.Dispatcher;
|
|
if (dispatcher != null && !dispatcher.CheckAccess())
|
|
{
|
|
dispatcher.BeginInvoke(
|
|
(Action)(() => nh.Invoke(this,
|
|
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset))),
|
|
DispatcherPriority.DataBind);
|
|
continue;
|
|
}
|
|
|
|
nh.Invoke(this, e);
|
|
}
|
|
}
|
|
}
|
|
}
|