[WPF] TextBox.SelectAll braucht laenger als 1 Sekunde in Verbindung mit ObservableCollection/ListView



  • Hallo,

    ich suche jetzt schon seit Stunden den Fehler und finde ihn einfach nicht, zumal der Code so jetzt schon 2 Monate nicht den Fehler gezeigt hat.

    long start = DateTime.Now.Ticks;
    
        NowButton_Click (null, null);
        Console.WriteLine ("a {0}", (DateTime.Now.Ticks - start) / 10000);
    
        foodEdit.Focus ();
        Console.WriteLine ("b {0}", (DateTime.Now.Ticks - start) / 10000);
    
        foodEdit.SelectAll ();
        Console.WriteLine ("c {0}", (DateTime.Now.Ticks - start) / 10000);
    
        int x = 12;
    

    NowButton_Click setzt von einem DatePicker das heutige Datum. Das loest ein Event aus woraufhin eine Textdatei eingelesen wird, was eine ObservableCollection fuellt, welche dann von einer ListView angezeigt wird. foodEdit ist eine ganz normale TextBox.

    Fuehre ich den Code aus kommt es zu folgender Ausgabe:
    a 36
    b 36
    c 1288
    Aus irgendeinem Grund braucht SelectAll ueber eine Sekunde. Gehe ich mit dem Debugger ueber die einzelnen Befehle => keine spuerbare Verzoegerung.

    Setze ich einen Breakpoint jeweils auf Zeile 1 und Zeile 12 (und springe dann per F5 zu zum naechsten Breakpoint):
    a 23
    b 23
    c 24
    Keine Verzoegerung mehr.

    Sobald die ListView befuellt wird und anschliessend in der TextBox SelectAll aufgerufen wird -> Verzoegerung.
    Lege ich diese beiden Sachen z.b. auf getrennte Tasten und druecke sie schnell hintereinander ergibt das auch keine Verzoegerung. Getrennt ausgefuehrt geht auch alles schnell. Es liegt auch nicht speziell an foodEdit - bei einer beliebigen TextBox (ohne jegliche Events) tritt diese Verzoegerung ebenfalls auf.

    tl;dr:

    ObservableCollection.Add(item) => ListView
    +
    TextBox.SelectAll
    > 1 Sekunde Verzoegerung

    getrennt aufgerufen: keine Verzoegerung.

    Hat jemand eine Idee an was das liegen koennte? Bzw. Debugging-Tipps?
    Danke!

    Oliver



  • Jetzt habe ich ein DoEvents vor TextBox.SelectAll eingefuegt und jetzt tritt dies nur noch beim Erstmaligen Aufruf auf und verkuerzt sich ansonsten auf <150ms.


Anmelden zum Antworten