Niedawno rozpocząłem programowanie w WPF i wpadłem na następujący problem. Nie rozumiem, jak korzystać z metody Dispatcher.Invoke()
. Mam doświadczenie w gwintowania i zrobiłem kilka prostych programów Windows Forms, gdzie po prostu korzystałem zZmiana sterowania WPF z wątku innego niż główny za pomocą Dispatcher.Invoke
Control.CheckForIllegalCrossThreadCalls = false;
Tak wiem, że to dość kiepski ale były proste aplikacje monitorujące.
Faktem jest, że robię aplikację WPF, która pobiera dane w tle, zaczynam nowy wątek, aby wykonać wywołanie pobierania danych (z serwera WWW), teraz chcę wyświetlić go na moim WPF Formularz. Chodzi o to, że nie mogę ustawić żadnej kontroli z tego wątku. Nie ma nawet etykiety ani niczego. Jak można to rozwiązać?
odpowiedzi komentarzy:
@Jalfp:
więc skorzystać z tej metody Dyspozytor w „nowym bieżniku” kiedy uzyskać dane? Czy powinienem zrobić, aby pracownik działający w tle odzyskał dane, umieścił je w polu i uruchomił nowy wątek, który czeka, aż to pole zostanie wypełnione i wywoła dyspozytora, aby pokazać pobrane dane do formantów?
Można pozbyć się „nowego działania (” strony, a po prostu użycie wyrażenia lambda: DispatcherPriority.Background,() => this.progressBar.Value = 50 – jrista
Tak nie wiem dlaczego ja położyć Akcja tutaj: p – japf
Więc używam tej metody Dispatchera w "nowym bieżniku", kiedy otrzymuję dane? Lub powinienem zrobić, że pracownik tła pobierze dane, umieści je w polu i rozpocznie nowy wątek, który czeka, aż to pole zostanie wypełnić i zadzwonić do dyspozytora, aby pokazać pobrane dane do kontroli? –