이상 MVVM
시나리오의 ViewModel
에서 UI 변경 사항을 다시 UI 스레드로 알리는 ObservableCollection<T>
을 확장하는 중입니다. 이를 위해 UI Dispatcher
을 IOC
까지 해결하고 궁극적으로 해결 된 Dispatcher
인스턴스를 내 사용자 정의 가능 유형 내에서 사용하려고합니다.디자인 검토 - IDispatcher 또는 Dispatcher 인스턴스 해결
초안은 다음과 같습니다.
class SafeObservableCollection<T>: ObservableCollection<T>
{
public SafeObservableCollection(IDispatcher currentDispatcher)//maybe an instance of Dispatcher
{
//assign resolved dispatcher to a private member
}
}
가정 :(a) 하나 디스패처/UIThread 사용 WPF 애플리케이션. (나) 나는 어떤 편차의 떨어져 ObservableCollection에
질문의 최우선 기본 클래스 멤버에서 (BackgroundWorker에를 사용하여 APM/EPM)를 생각하고 있지 않다 : 당신이 디스패처 인스턴스를 해결하기 위해 더 나은 무엇을 제안 할 수있는 설명 된 코드를 따라 가면서? 가능한 디자인 결함을 찾아내는 데 도움을 줄 수 있습니까? 메모리 누수, 교착 상태 또는 간과 한 것 등. 이 방법을 사용하기로 결정한 경우 Dispatcher 인스턴스의 수명은 얼마일까요?
의견을 주셔서 감사합니다. 그러나 여기서 우리는 스레드 유사성 문제 및 동기화 문제에 대해 이야기하고 있습니다. 그것을 확장 할 수 있습니까? – Nair
친화력 문제는 무엇을 의미합니까? 내가 제공 한 코드를 사용하면 이미 WPF 4.5에서 해결되었습니다. 의미 UI는 별도의 스레드에서 생성되고 관리되는 컬렉션에 대해 바인딩 할 수 있습니다. Dispatcher는 관련이 없습니다. –
Microsoft에서 "해결 된 스레드 유사성 문제"에 대해 설명하거나 이야기하는 링크를 참조하십시오. 그 동안 WPFExtension Lib의 주어진 링크에서 스레드 안전 관찰 가능을 구현할 수있는 방법에 대한 아이디어를 얻었습니다. 답변을 수락하기 전에 원래 게시물을 '확장에 대한 참조 만'으로 편집 할 수 있습니까? 이는 원했던 것과 가깝기 때문입니다. 아마 이것은 다른 사람들이 더 혼란 스러움없이 그 점을 얻는 데 도움이 될 것입니다. – Nair