Procedura: ridurre lo sfarfallio nella grafica con il doppio buffering per form e controlli

Il doppio buffer usa un buffer di memoria per risolvere i problemi di sfarfallio associati a più operazioni di disegno. Quando il doppio buffer è abilitato, tutte le operazioni di disegno vengono prima sottoposte a rendering in un buffer di memoria invece che nella superficie di disegno visualizzata. Dopo che tutte le operazioni di disegno sono state completate, il buffer di memoria viene copiato direttamente nella superficie di disegno associata. Poiché viene eseguita una sola operazione grafica sullo schermo, lo sfarfallio dell'immagine associato a operazioni di disegno complesse viene eliminato. Per la maggior parte delle applicazioni, il doppio buffer predefinito fornito da .NET Framework fornirà i risultati migliori. I controlli Windows Form standard vengono memorizzati nel doppio buffer per impostazione predefinita. È possibile abilitare il doppio buffer predefinito nei moduli e i controlli creati in due modi. È possibile impostare la DoubleBuffered proprietà su trueoppure chiamare il SetStyle metodo per impostare il OptimizedDoubleBuffer flag su true. Entrambi i metodi abilitano il doppio buffer predefinito per il modulo o il controllo e forniscono rendering grafico senza sfarfallio. La chiamata al SetStyle metodo è consigliata solo per i controlli personalizzati per cui è stato scritto tutto il codice di rendering.

Per scenari di buffer doppio più avanzati, ad esempio animazione o gestione avanzata della memoria, è possibile implementare la propria logica di doppio buffering. Per altre informazioni, vedere Procedura: Gestire manualmente la grafica memorizzata nel buffer.

Per ridurre lo sfarfallio

  • Impostare la proprietà DoubleBuffered su true.

    DoubleBuffered = true;
    
    DoubleBuffered = True
    
    

- oppure -

  • Chiamare il SetStyle metodo per impostare il OptimizedDoubleBuffer flag su true.

    SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    
    SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    
    

Vedi anche