Ho un modulo di Windows, contenente una casella di testo e un datagridview. Non appena viene modificato il testo della casella di testo, viene aggiornata l'origine dati della vista dati. È fatto gestendo l'evento TextChanged della casella di testo e assegnando all'origine dati una nuova lista, ad esempio. Di solito la nuova origine dati contiene 1000+ righe, una quantità abbastanza grande di dati. Inoltre, interrogare il DB per recuperare questo elenco richiede anche molto tempo.The Magic Of DataGridView
Ciò che mi sorprende è che se digito abbastanza velocemente nella casella di testo, il datagrid sospende il rendering stesso e ancora e restituisce solo il risultato finale. Ignora completamente i risultati medi. Questo ha senso perché il thread dell'interfaccia utente in esecuzione è occupato durante le modifiche di testo consecutive. Ma perché posso ancora scrivere nella casella di testo?
- TextChange
- Prelevamento dati
- Rinfrescante DataGridView (senza rendering/pittura)
- TextChange
- Prelevamento dati
- Rinfrescante DataGridView (senza rendering/pittura)
- ... TextChange
- Recupero dati
- Refreshing DataGridView (rendering/pittura finale)
- Fine.
È come se la casella di testo fosse su un altro thread ma non lo è assolutamente. Qualcuno sa perché?
È vero. Ma perché la casella di testo elabora effettivamente il messaggio di input (messaggio key press) ma dgv non esegue il rendering dopo ogni pressione di un tasto? – Alireza
Il messaggio di disegno è un messaggio a bassa priorità, consegnato solo quando la coda è vuota. –
Grazie Hans. Voglio saperne di più sul thread dell'interfaccia utente, sul loop dei messaggi e sulla priorità dei messaggi. Vuoi nominare un buon riferimento? – Alireza