Grafica con doppio buffer
Flicker è un problema comune durante la programmazione della grafica. Le operazioni grafiche che richiedono più operazioni complesse di disegno possono causare lo sfarfallio delle immagini renderizzate o un aspetto altrimenti inaccettabile. Per risolvere questi problemi, .NET Framework consente l'accesso al doppio buffer.
Il doppio buffer utilizza un buffer di memoria per risolvere i problemi di sfarfallio associati a più operazioni di disegno. Quando il doppio buffering è abilitato, tutte le operazioni di disegno vengono prima eseguite su un buffer di memoria anziché sulla superficie di disegno dello schermo. Al termine di tutte le operazioni di pittura, 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.
Buffer doppio predefinito
Il modo più semplice per usare il doppio buffer nelle applicazioni consiste nell'usare il doppio buffer predefinito per moduli e controlli forniti da .NET Framework. È possibile abilitare il doppio buffering predefinito per i controlli Windows Forms e i controlli Windows personalizzati impostando la proprietà DoubleBuffered su true
o utilizzando il metodo SetStyle. Per ulteriori informazioni, vedere Come ridurre lo sfarfallio della grafica con il doppio buffering per moduli e controlli.
Gestione manuale della grafica memorizzata nel buffer
Per scenari di doppio buffer più avanzati, ad esempio animazione o gestione avanzata della memoria, è possibile usare le classi .NET Framework per implementare la propria logica di doppio buffering. La classe responsabile dell'allocazione e della gestione dei singoli buffer grafici è la classe BufferedGraphicsContext. Ogni dominio applicativo ha un'istanza predefinita BufferedGraphicsContext che gestisce tutto il doppio buffer predefinito per tale applicazione. Nella maggior parte dei casi ci sarà un solo dominio applicazione per applicazione, quindi in genere esiste un BufferedGraphicsContext predefinito per ogni applicazione. Le istanze di BufferedGraphicsContext predefinite vengono gestite dalla classe BufferedGraphicsManager. È possibile recuperare un riferimento all'istanza di BufferedGraphicsContext predefinita chiamando il Current. È anche possibile creare un'istanza di BufferedGraphicsContext dedicata, che può migliorare le prestazioni per le applicazioni con utilizzo grafico elevato. Per informazioni su come creare un'istanza di BufferedGraphicsContext, vedere Procedura: Gestire manualmente la grafica memorizzata nel buffer.
Visualizzazione manuale della grafica memorizzata nel buffer
È possibile usare un'istanza della classe BufferedGraphicsContext per creare buffer grafici chiamando il BufferedGraphicsContext.Allocate, che restituisce un'istanza della classe BufferedGraphics. Un oggetto BufferedGraphics gestisce un buffer di memoria associato a una superficie di rendering, come un form o un controllo.
Dopo essere stata istanziata, la classe BufferedGraphics gestisce il rendering su un buffer grafico in memoria. È possibile eseguire il rendering della grafica nel buffer di memoria tramite il Graphics, che espone un oggetto Graphics che rappresenta direttamente il buffer di memoria. È possibile disegnare a questo oggetto Graphics proprio come si farebbe con un oggetto Graphics che rappresenta una superficie di disegno. Dopo che tutte le immagini sono state disegnate nel buffer, è possibile usare il BufferedGraphics.Render per copiare il contenuto del buffer nell'area di disegno sullo schermo.
Per altre informazioni sull'uso della classe BufferedGraphics, vedere Rendering della grafica memorizzata manualmente nel buffer. Per altre informazioni sul rendering della grafica, vedere Grafica e disegno in Windows Forms
Vedere anche
- BufferedGraphics
- BufferedGraphicsContext
- BufferedGraphicsManager
- Procedura: Eseguire manualmente il rendering della grafica memorizzata nel buffer
- Procedura: Ridurre lo sfarfallio della grafica con doppio buffer per i moduli e i controlli
- Procedura: Gestire manualmente la grafica memorizzata nel buffer
- Grafica e disegno in Windows Forms
.NET Desktop feedback