Gli eventi vengono caricati ed eseguiti sul thread principale, e se il primo evento sul thread principale non è finito, arrivi al secondo evento, proprio come altri programmi nel thread principale, aspetti che il precedente finisca l'elaborazione prima di elaborare il successivo o un altro programma o evento nel thread principale.
Quanto sopra è che ho incapsulato io stesso un oggetto, e nell'oggetto, ho racchiuso anch'io un evento.
Elaboro i dati con il metodo dell'iscrizione agli eventi, come la parte dell'annotazione delle immagini,
Perché l'evento a cui mi ero iscritto era un file lettura txt, e il mio file txt aveva 50.000 righe, il che ha fatto sì che il metodo dell'evento venga attivato 50.000 volte.
Poi, quando eseguii il programma, ho scoperto che la mia interfaccia era in uno stato di animazione sospesa, e sapevo che doveva esserci un problema.
All'inizio pensavo fosse la manipolazione dei controlli dell'interfaccia nel metodo a causare la morte finta.
Poi, passo dopo passo, si scoprì che aggiungendo dati al set, era già entrato in uno stato di animazione sospesa.
Perché??? Infine, ho scoperto su internet che l'evento è nel thread principale e, se il primo evento non viene elaborato, bloccherà l'esecuzione del prossimo evento,
In generale capivo cosa ordinavo, per dirla senza mezzi termini, 50.000 eventi hanno causato il blocco del programma, e poi sono entrato in uno stato di animazione sospesa.
Soluzione:
Per alcuni eventi semplici, che non porteranno all'esecuzione di un gran numero di metodi eventi, possono essere scritti direttamente nel metodo event.
Per un gran numero di metodi di eventi chiamati, spero che tu apra un thread per gestirlo, come: socket o httplistener, ecc. (la quantità di dati è piccola e non puoi vederla, una volta che la quantità di dati è grande, haha, morirà direttamente)
|