이것은 스레드 안전 WPF 인 ObservableCollection을 VB에서 만들려고 시도한 것입니다. 문제가 있다고 생각합니까? http://www.codeproject.com/KB/collections/AsyncObservableCollection.aspx 그것은 VB에없는 :VB에서 다중 스레드 ObservableCollection
Public Class WpfObservableCollection(Of T)
Inherits ObjectModel.ObservableCollection(Of T)
Public Sub New()
End Sub
Public Sub New(ByVal list As List(Of T))
MyBase.New(list)
End Sub
Public Sub New(ByVal collection As IEnumerable(Of T))
MyBase.New(collection)
End Sub
Protected Overrides Sub OnCollectionChanged(ByVal e As System.Collections.Specialized.NotifyCollectionChangedEventArgs)
Dim eventList = CType(CollectionChangedField.GetValue(Me), NotifyCollectionChangedEventHandler)
If eventList IsNot Nothing Then
Using Me.BlockReentrancy
Dim activeDispatcher = (From nh In eventList.GetInvocationList() Let dpo = TryCast(nh.Target, DispatcherObject) Where dpo IsNot Nothing Select dpo.Dispatcher).FirstOrDefault()
If activeDispatcher IsNot Nothing AndAlso Not activeDispatcher.CheckAccess Then
activeDispatcher.BeginInvoke(Sub() MyBase.OnCollectionChanged(e), DispatcherPriority.DataBind)
Else
MyBase.OnCollectionChanged(e)
End If
End Using
End If
End Sub
Private Shared ReadOnly CollectionChangedField As FieldInfo = GetType(ObjectModel.ObservableCollection(Of T)).GetField("CollectionChanged", BindingFlags.NonPublic Or BindingFlags.Instance)
End Class
(.. 스레드 안전 내가 분명히 아직도 동시 업데이트를 처리 할 수 WPF GUI 스레드와 함께 사용하기위한 안전 뜻으로)
새 항목 (IEnumerable (Of T))이 이미있을 때 New (List Of Of T)를 제공 한 이유가 궁금합니다. 어떤 이유? –