Zdarzenia są ładowane i uruchamiane w głównym wątku, a jeśli pierwsze zdarzenie w głównym wątku nie jest ukończone, przechodzisz do drugiego zdarzenia, podobnie jak inne programy w głównym wątku, czekasz, aż poprzednie zakończy przetwarzanie, zanim przetworzysz kolejny lub inny program lub zdarzenie w głównym wątku.
Powyższe jest takie, że sam zatkałem obiekt, a w tym obiekcie sam zapakowałem zdarzenie.
Przetwarzam dane metodą subskrybowania zdarzeń, takich jak część dotycząca adnotacji obrazów,
Ponieważ zdarzenie, na które się zapisałem, było czytnym plikiem txt, a mój plik txt miał 50 000 linii, co powodowało, że metoda zdarzenia była wyzwalana 50 000 razy.
Gdy uruchomiłem program, zauważyłem, że mój interfejs jest w stanie zawieszonej animacji i wiedziałem, że musi być jakiś problem.
Początkowo myślałem, że to manipulacja sterowaniem interfejsu w tej metodzie powoduje fałszywą śmierć.
Następnie, krok po kroku, okazało się, że dodając dane do zestawu, wszedł on już w stan zawieszonej animacji.
Dlaczego??? W końcu dowiedziałem się z internetu, że zdarzenie znajduje się w głównym wątku, a jeśli pierwsze zdarzenie nie zostanie przetworzone, zablokuje wykonanie kolejnego zdarzenia,
Ogólnie rozumiałem, co poleciłem, mówiąc wprost, 50 000 zdarzeń spowodowało zablokowanie programu, a potem wszedłem w stan zawieszenia animacji.
Rozwiązanie:
Dla niektórych prostych zdarzeń, które nie prowadzą do wykonania dużej liczby metod zdarzeń, można zapisać bezpośrednio w metodzie zdarzenia.
Dla dużej liczby wywoływanych metod zdarzeń mam nadzieję, że otworzysz wątek, który się tym zajmie, na przykład socket czy httplistener itd. (ilość danych jest mała i jej nie widzisz, gdy ilość danych jest duża, haha, to od razu padnie)
|