Vorgehensweise: Reduzieren von Grafikflimmern mit doppelter Pufferung für Formulare und Steuerelemente

Bei der doppelten Pufferung werden Flimmerprobleme, die durch mehrere Zeichenoperationen entstehen, mithilfe eines Arbeitsspeicherpuffers behoben. Wenn die doppelte Pufferung aktiviert ist, werden alle Zeichenoperationen anstelle der Zeichenoberfläche auf dem Bildschirm zunächst in einen Arbeitsspeicherpuffer gerendert. Nachdem alle Zeichenoperationen abgeschlossen sind, wird der Arbeitsspeicherpuffer direkt in die damit verbundene Zeichenoberfläche kopiert. Da nur ein Grafikvorgang auf dem Bildschirm ausgeführt wird, wird das Bild entfernt, das mit komplexen Zeichenvorgängen verknüpft ist. Für die meisten Anwendungen erzielt die standardmäßige doppelte Pufferung, die von .NET Framework bereitgestellt wird, die besten Ergebnisse. Windows Forms-Standardsteuerelemente werden in der Regel doppelt gepuffert. Es gibt zwei Möglichkeiten, wie Sie die standardmäßige doppelte Pufferung in Ihren Formularen und erstellten Steuerelementen verwenden können. Sie können entweder die DoubleBuffered-Eigenschaft auf truefestlegen, oder Sie können die Methode SetStyle aufrufen, um das OptimizedDoubleBuffer-Flag auf true festzulegen. Beide Methoden ermöglichen standardmäßige doppelte Pufferung für Ihr Formular oder Steuerelement und bieten flimmerfreies Grafikrendering. Das Aufrufen der SetStyle-Methode wird nur für benutzerdefinierte Steuerelemente empfohlen, für die Sie den gesamten Renderingcode geschrieben haben.

Bei anspruchsvolleren Szenarios mit doppelter Pufferung, wie Animationen oder erweiterter Speicherverwaltung, können Sie Ihre eigene doppelte Pufferungslogik implementieren. Weitere Informationen finden Sie unter Gewusst wie: Manuelles Verwalten von gepufferten Grafiken.

So reduzieren Sie das Flimmern

  • Setzen Sie die DoubleBuffered-Eigenschaft auf true.

    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)
    
    

Weitere Informationen