ListView flackert

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-checker.

    ListView flackert

    Hi,
    ich habe eine Listview, die ich mit einem Timer alle 50 Msec befülle. Nun habe ich das Problem, dass sie ziemlich stark flackert.
    Nun zur Frage: kann man eine Listview dazu bringen, nicht zu flackern, wenn Daten aktualisiert werden?
    Mein bisheriger Code:

    VB.NET-Quellcode

    1. ListView1.BeginUpdate()
    2. ListView1.Items.Clear()
    3. Try
    4. 'Befüllen mit Daten
    5. Catch
    6. End Try
    7. ListView1.EndUpdate()

    mbfan
    You should live for that what you belive. - Drag-Drop Beschreibung
    Probiers auch mal mit:

    VB.NET-Quellcode

    1. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)


    MSDN sagt:
    Mithilfe gepufferter Grafik kann Flackern vermindert oder ausgeschlossen werden. Das Flackern entsteht, wenn Teile einer angezeigten Oberfläche progressiv neu gezeichnet werden. Gepufferte Grafiken erfordern, dass die aktualisierten Grafikdaten zuerst in einen Puffer geschrieben werden. Die Daten im Grafikpuffer werden dann schnell in den Speicher der angezeigten Oberfläche geschrieben. Der relativ schnelle Wechsel des Speichers der angezeigten Grafik reduziert das Flackern, das andernfalls auftreten kann.
    Danke für die Antworten, doch keine davon hat mir geholfen. Ich habe das Flackern jetzt dadurch "behoben", dass ich das Liostviewfüllen in einen anderen Timer ausgelagert habe, der die Daten nur alle 5000 MSec abruft, in Gegensatz zu den anderen Daten, die angezeigt werden sollen, da die alle 50 MSec abgerufen werden müssen, um schlechte Grafik zu vermeiden.
    mbfan
    You should live for that what you belive. - Drag-Drop Beschreibung
    wieso, zum Teufel, aktualisierst du deine Listview mittels Timer?
    Nutze dazu genau die Methode, die neue Daten schreibt oder löscht. Du kannst auch die daten in einem Array halten und mit Listview.Items.Addrange(DeinArray()) in einem Rutsch neu schreiben tun.

    .Net ist eine durch Ereignisse gesteuerte Programmierung. Der Kurt schrieb ma treffend dazu: Du rennst ja nicht alle 5 Sekunden zur Tür, ob deine Pizza schon da ist, sondern wartest auf der Couch bisses klingelt!

    Fiel Fergnügen
    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hallo Zusammen!
    Sry ich das ich das Thema wieder "hervorbringe" - aber ich habe das selbe Problem und hänge an diesem seit 2 Tagen.


    Der Grund warum ich zb. der Timer verwende ist das mein Tool alle 2 sec die Auslastung von CPU, RAM, NIC etc in eine Listview schreibt. Dies führt dann auch zu diesem Flackern ab dem 10 Eintrag in der Listview.

    Gibt das dafür nun eine funktionierende Lösung? Ich habe mir xx Beiträge verschiedenster Foren mit dem Double Buffer angsehen. mit updatebegin und end. Alles ohne Erfolg.

    Verwende .NET 4.0

    Danke
    mfg
    Wenn du alle 2 Sekunden eine neue Zeile in das ListView-Control schribst, hast du sehr schnell so viele Zeilen, dass das keiner mehr vernünftig lesen kann/möchte. Also speichere deine Werte in einer geeigneten Datenstruktur und zeige nur ausgewählte Daten an

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Hallo! Danke für die rasche Antwort.
    Das stimmt das kann sehr unleserlich werden. Hintergrund: bei einem Kunden gibt es Performance Probleme und da geht es darum diese Daten für ca. 24h zu erfassen. Ich habe dann noch eine Funktion wo ich die Listview in eine CSV exportiere und damit kann mann das schon leserlich machen.

    Kannst du dazu ein Beispiel nennen?
    Eventuell würde das Double Buffering wirklich helfen aber ich wende es nur falsch an?
    Vielen Dank.