Mam aplikację GUI, która łączy się z czujnikiem, zbiera dane i przetwarza je w tle za pomocą wątków BackgroundWorker
.Jak zdebugować i rozwiązać awarię "DisconnectedContext"?
W tej formie publikuję dane do GUI, używając ProgressChanged
, która wydawała się działać dobrze. Od tego czasu podniosłem szybkość transmisji danych i odkryłem problem; jeśli oprogramowanie pozostanie uruchomione przez kilka minut, ilość użycia procesora wydaje się wzrastać, aż osiągnie prawie 100% na obu rdzeniach na moim komputerze i w tym momencie pojawia się błąd, który brzmi:
Managed Debugging Assistant "DisconnectedContext" wykrył problem w "myapp.exe". Informacje dodatkowe: Kontekst 0xe2ba0 jest rozłączony. Zwalnianie interfejsów z bieżącego kontekstu (kontekst 0xe2d10). Może to spowodować uszkodzenie lub utratę danych.
Przeczytałem kilka rzeczy w Internecie, które sugerują, że może się to zdarzyć, jeśli aplikacja GUI nie jest w stanie wystarczająco pompować wiadomości. Zauważyłem, że mogę sprowokować tę samą awarię, by zdarzyć się szybciej, jeśli szybko zmieniam rozmiar okna (tj. Pompuję ładunek więcej komunikatów), który wspiera teorię, o której myślę?
więc o pytania są:
- czy ktoś zgadza się z moją hipotezą o wiadomość pompowania?
- Czy istnieje inne wytłumaczenie?
- Czy jest jakiś sposób, mogę to udowodnić (zerknąć na liczbę wiadomości w kolejce)?
- Czy wszystkie te złe zapachy kodu sugerują, że podchodzę do tego w niewłaściwy sposób?
Każda rada byłaby bardzo wdzięcznie przyjęta.
Próbowałem ustawienia MTATHread, które zdawało się tylko powodować sporadyczne awarie. Zamiast tego przyjąłem mechanizm queuenig i zgłosiłem błąd w części kodu wyświetlacza, który był nadpełny w "RichTextBoxControl". Pomiędzy tymi dwoma wygląda na to, że rozwiązałem problem. Dzięki za sugestie. –
Widziałem to już kilka razy i na pewno zostało wywołane przez próbę wysłania zbyt wielu żądań 'ProgressChanged' od wątku producenta danych do jego odbiorców. –