Windows Vista i nowsze wersje domyślnie implementują sprawdzanie responsywności aplikacji opartych na interfejsie użytkownika .
Może to oznaczać, że aplikacja jest oznaczona jako „Nie odpowiada”, gdy znajduje się na pierwszym planie (pasek zadań) lub gdy jej okno jest aktywne (okno dialogowe).
Gdy aplikacja nie odpowiada, a system operacyjny może wywnioskować, że awaria jest związana z wyjątkiem w module potomnym, którego sama aplikacja nie jest świadoma, system Windows wie, że aplikacja nie może wyświetlić własnego komunikatu o błędzie, zapisać w dzienniku zdarzeń systemu, i utwórz raport o awarii, system Windows wyświetli okno dialogowe wskazujące, że proces „przestał działać”. Różni się to nieco od awarii aplikacji, ponieważ stos głównego pliku wykonywalnego sam się nie zawiesił; jednak generalnie czeka na odpowiedź modułu potomnego, która nigdy nie nadejdzie. Dziennik zdarzeń często zawiera informacje o wyjątku dziecka.
Aplikacja jest uważana za niereagującą, gdy interfejs API systemu Windows nie może wykryć, że okno interfejsu użytkownika weszło w miejsce, w którym użytkownik może nim manipulować w pewnym momencie. W języku C # możesz sprawdzić status systemu Windows, aby sprawdzić jego reakcję na połączenie Process.Responding(). Ta metoda zwraca false (lub zgłosi wyjątek, jeśli MainWindowHandle nie istnieje) lub true, jeśli okno jest w stanie bezczynności i oczekuje na dane wejściowe.
Są przypadki, w których program nieodpowiadający wykonuje wiele pracy, dokładnie tak, jak powinien, więc brak odpowiedzi nie zawsze wskazuje na awarię (po prostu zły kod). Okno pulpitu może ostatecznie stać się responsywne. „Przestał działać” dialogowe jednak zazwyczaj nie wskazują na trwałą niewydolność, a aplikacja będzie musiała zostać przerwana. Nie jest to w 100% prawdziwe przez cały czas, ale najczęściej tak jest.
Charakter tych komunikatów i związane z nimi problemy są nierozerwalnie związane z technikami programowania stosowanymi do wykonywania pracy oraz integracji z zewnętrznymi komponentami i usługami, takimi jak zewnętrzne interfejsy API. Microsoft opublikował kilka dobrych informacji o tym, co robić, a czego nie robić, aby opracować responsywny projekt interfejsu użytkownika . Słabe strategie wątkowania, synchroniczny i asynchroniczny dostęp do komponentów zewnętrznych oraz rywalizacja o zasoby (blokady / zakleszczenia) są częstymi przyczynami.
Dla użytkowników końcowych cierpiących na problemy z aplikacjami, które „przestały działać” Microsoft zaleca obszerną ścieżkę rozwiązywania problemów, którą można znaleźć tutaj: http://support.microsoft.com/kb/2694911 Sterownik karty graficznej jest często odpowiedzialny za problemy z Draw () pętli, a zatem może powodować brak reakcji, podobnie jak systemowe interfejsy API. sprawdzenie instalacji sterownika i sprawdzenie, czy sam system operacyjny jest zintegrowany (z SFC.exe), są warte podjęcia kroków w celu ustalenia, czy aplikacja ściśle integruje się z systemem, zgodnie z oczekiwaniami. Sprzęt, taki jak karta graficzna i pamięć RAM, również musi działać poprawnie.
Mam nadzieję że to pomogło