Freigeben über


So geht's: Grafikflimmern mit Doppel-Buffering für Formulare und Steuerelemente reduzieren

Bei der doppelten Pufferung wird ein Speicherpuffer verwendet, um die Flackerprobleme im Zusammenhang mit mehreren Lackiervorgängen zu beheben. Wenn die doppelte Pufferung aktiviert ist, werden alle Zeichenoperationen anstelle der Zeichenoberfläche auf dem Bildschirm zunächst in einen Arbeitsspeicherpuffer gerendert. Nachdem alle Malarbeiten abgeschlossen sind, wird der Speicherpuffer direkt auf die damit verknüpfte Zeichnungsoberfläche kopiert. Da nur ein Grafikvorgang auf dem Bildschirm ausgeführt wird, wird das Bildflimmern, das mit komplexen Malvorgängen verbunden ist, eliminiert. Für die meisten Anwendungen stellt die standardmäßige doppelte Pufferung, die vom .NET Framework bereitgestellt wird, die besten Ergebnisse bereit. Standardmäßig sind die Steuerelemente von Windows Forms doppelt gepuffert. Sie können die standardmäßige Doppelpufferung in Formularen und erstellten Steuerelementen auf zwei Arten aktivieren. Sie können entweder die DoubleBuffered-Eigenschaft auf truefestlegen oder die SetStyle-Methode aufrufen, um das OptimizedDoubleBuffer-Flag auf truefestzulegen. Beide Methoden ermöglichen die standardmäßige Doppelpufferung für Ihr Formular oder Steuerelement und bieten flackerfreies Grafik-Rendering. Das Aufrufen der SetStyle-Methode wird nur für benutzerdefinierte Steuerelemente empfohlen, für die Sie den gesamten Renderingcode geschrieben haben.

Für komplexere Szenarien mit doppelter Pufferung, z. B. Animation oder erweiterte Speicherverwaltung, können Sie ihre eigene Doppelpufferlogik implementieren. Weitere Informationen finden Sie unter So verwalten Sie gepufferte Grafiken manuell.

So reduzieren Sie das Flimmern

  • Legen Sie die DoubleBuffered-Eigenschaft auf true fest.

    DoubleBuffered = true;
    
    DoubleBuffered = True
    
    

-oder-

  • Rufen Sie die SetStyle-Methode auf, um das OptimizedDoubleBuffer-Flag auf true festzulegen.

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

Siehe auch