저는 최근 WPF에서 프로그래밍을 시작했으며 다음 문제에 부딪 혔습니다. 나는 Dispatcher.Invoke()
방법을 사용하는 방법을 이해하지 못한다. 나는 스레딩 경험을하고 난 몇 가지 간단한 윈도우 네, 그건 꽤 절름발이 그러나이 간단한 모니터링 애플리케이션 있었다 알고 난 그냥Dispatcher.Invoke를 사용하여 비 메인 스레드에서 WPF 컨트롤을 변경하십시오.
Control.CheckForIllegalCrossThreadCalls = false;
을 사용하는 프로그램을 양식 만들었습니다.
사실 이제 백그라운드에서 데이터를 검색하는 WPF 응용 프로그램을 만들고 있는데, 웹 서버에서 데이터를 검색하기 위해 새 스레드를 시작하고 지금은 WPF에 표시하려고합니다. 형태. 것은,이 스레드에서 어떤 컨트롤을 설정할 수 없습니다. 심지어 레이블이나 뭐. 이 문제를 어떻게 해결할 수 있습니까?
대답 코멘트 :
@Jalfp :
내가 데이터를 얻을 때 그래서 나는 '새로운 트레드'이 디스패처 방법을 사용합니까? 또는 배경 작업자가 데이터를 검색하여 필드에 넣고이 필드가 채워질 때까지 대기하는 새 스레드를 시작하고 검색된 데이터를 컨트롤에 표시하도록 디스패처를 호출해야합니까?
당신은 '새로운 액션 ('부분을 제거하고, 단순히 람다 식 사용 얻을 수 있습니다 내가 넣어 이유 50 – jrista
그래 모르는 DispatcherPriority.Background,() => this.progressBar.Value =을 여기서 조치 : p – japf
데이터를 얻을 때 '새 트레드'에서이 Dispatcher 메소드를 사용합니까? 아니면 백그라운드 작업자가 데이터를 검색하여 필드에 넣고이 필드가 나타날 때까지 대기하는 새 스레드를 시작해야합니까? 검색된 데이터를 컨트롤에 표시하도록 운영자를 호출하고 호출합니다. –