Les événements sont chargés et exécutés sur le thread principal, et si le premier événement sur le thread principal n’est pas terminé, vous arrivez au second événement, comme les autres programmes du thread principal, attendez que le précédent termine son traitement avant de traiter le suivant, ou un autre programme ou événement dans le thread principal.
Ce qui précède, c’est que j’ai encapsulé un objet moi-même, et dans cet objet, j’ai encapsulé un événement moi-même.
Je traite les données dans la méthode de l’abonnement aux événements, comme la partie annotation d’image,
Parce que l’événement auquel je me suis abonné était un fichier text de lecture, et mon fichier txt comptait 50 000 lignes, ce qui a déclenché la méthode d’événement 50 000 fois.
Puis, en lançant le programme, j’ai constaté que mon interface était en animation suspendue, et j’ai su qu’il devait y avoir un problème.
Au début, je pensais que c’était la manipulation des contrôles de l’interface utilisateur dans la méthode qui causait la fausse mort.
Puis, étape par étape, on découvrit qu’en ajoutant des données à l’ensemble, il était déjà entré dans un état d’animation suspendue.
Pourquoi ??? Enfin, j’ai découvert sur internet que l’événement est sur le fil principal, et que si le premier événement n’est pas traité, il bloquera l’exécution du suivant,
Je comprenais généralement ce que j’avais ordonné, pour être franc, 50 000 événements ont provoqué le blocage du programme, puis je suis entré en animation suspendue.
Solution:
Pour certains événements simples, qui ne conduiront pas à l’exécution d’un grand nombre de méthodes d’événements, cela peut être écrit directement dans la méthode d’événement.
Pour un grand nombre de méthodes d’événements appelées, j’espère que vous ouvrirez un thread pour gérer cela, comme : socket ou httplistener, etc. (la quantité de données est faible et vous ne pouvez pas la voir, une fois que la quantité de données est grande, haha, elle mourra directement)
|