모음 (List<T>
)에 바인딩 된 WPF ListView가 있습니다. 현재 잘 작동하는 현재 스레드에서 업데이트됩니다.스레드 안전성, 목록, 바인딩 및 WPF
목록을 스레드로 업데이트하기위한 논리를 옮기고 스레드 안전성과 목록 바인딩에 관한 몇 가지 잠재적 인 문제를 봅니다. NotifyPropertyChanged
으로 전화하지 않으면 바인딩이 업데이트되지 않을 것이라고 확신 할 수 있습니까? NotifyPropertyChanged
은 블로킹 호출입니까 아니면 단순히 메시지 대기열에 추가하는 것입니까? 이 인스턴스에서 확실하게 내가 컬렉션을 업데이 트 ListView
하지만, 시간이 바인딩을 업데이 트하는 예외가 던지거나 프로그램을 충돌하는 다른 스레드에서 컬렉션을 수정할 수 있습니다 조건이있을 수 있습니다.
이러한 시나리오에서 스레드 안전을 구현하는 가장 좋은 방법은 무엇입니까?
void ThreadProc()
{
window.Dispatcher.Invoke(() => {
//UpdateList
});
}
Invoke는 차단 호출이 아니지만? 그런 다음 목록을 수정하는 동시에 바인딩을 업데이트 할 수 있습니다. – Chris
@Chris 동기식이지만 Begin/EndInvoke를 항상 호출 할 수 있습니다. – Will