100% of people found this useful
Autore: Marco Minerva
Quando è necessario effettuare lunghe operazioni di aggiornamento di un controllo contenuto in una Form, ad esempio una ListView oppure una TreeView, nonostante si utilizzino i metodi BeginUpdate ed EndUpdate, è possibile osservare fastidiosi effetti di flickering. Per eliminare completamente questo problema, è possibile ricorrere alla funzione dell'API di Windows LockWindowUpdate, con cui è possibile abilitare o disabilitare il disegno (e, quindi, l'aggiornamento) di una certa regione:
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool LockWindowUpdate(IntPtr hWndLock);
Per impedire l'aggiornamento del controllo TreeView1, è sufficiente usare questa istruzione:
LockWindowUpdate(TreeView1.Handle);
Al termine delle operazioni, è necessario riabilitare le funzioni di disegno utilizzando il valore IntPtr.Zero:
LockWindowUpdate(IntPtr.Zero);
E' importante assicurarsi di richiamare sempre quest'ultima istruzione, altrimenti l'oggetto "bloccato" (una TreeView in questo caso) non riceverà più messaggi di aggiornamento.