Събитията се зареждат и изпълняват върху основната нишка, и ако първото събитие в основната нишка не е завършено, преминавате към второто събитие, както и други програми в основната нишка, изчаквате предишната да приключи обработката, преди да обработите следващата или друга програма или събитие в основната нишка.
Горното е, че аз сам капсулирах обект, а в обекта сам обхванах събитие.
Обработвам данни по метода на абониране на събития, като например частта с анотация на изображението,
Защото събитието, за което се абонирах, беше read txt файл, а моят txt файл имаше 50 000 реда, което предизвикваше задействане на метода за събитие 50 000 пъти.
После, когато стартирах програмата, установих, че интерфейсът ми е в състояние на суспендирана анимация и знаех, че там трябва да има проблем.
Първоначално мислех, че манипулацията на контролите на интерфейса е причината за фалшивата смърт.
След това, стъпка по стъпка, се установи, че при добавяне на данни към набора вече е влязъл в състояние на суспендирана анимация.
Защо??? Накрая разбрах от интернет, че събитието е в основната нишка и ако първото събитие не бъде обработено, то ще блокира изпълнението на следващото събитие,
Обикновено разбирах какво съм поръчал, да го кажа направо, 50 000 събития блокираха програмата, след което влязох в състояние на суспендирана анимация.
Решение:
За някои прости събития, които няма да доведат до изпълнение на голям брой събитийни методи, могат да бъдат записани директно в метода на събитието.
За голям брой методи за събития, надявам се да отвориш нишка, като: socket или httplistener и т.н. (количество данни е малко и не можеш да го видиш, щом е голямо, хаха, те ще умрат директно)
|