2016-11-05 4 views
1

ich eine einfache treeview haben, wenn Klick auf treeview Artikel i laden Sie einfach eine TextdateiLesedatei async noch blockiert die UI

Hier ist der Code:

private async void NotesTreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e) 
{ 
    var clickedModel = e.NewValue as TreeFileItem; 
    if (clickedModel != null && File.Exists(clickedModel.FilePath)) 
    { 
     _viewModel.NoteLoadingInProgress = true; 
     using (var reader = File.OpenText(clickedModel.FilePath)) 
     { 
      var fileContent = await reader.ReadToEndAsync(); 
      _viewModel.ActiveNote = fileContent; 
     } 
     _viewModel.NoteLoadingInProgress = false; 
    } 
} 

Dies funktioniert, aber wenn ich auf Bei einem Baumansicht-Element wird die UI eingefroren, bis das Lesen der Datei abgeschlossen ist. Warum solch ein Verhalten? Ich habe andere asynchrone Methoden in meinem Code und sie blockieren nicht ui.

EDIT: es scheint das Problem nicht Datei beim Lesen, aber große Menge an Text in Einstellung über Datenbindung TextBox.Text properti, obwohl es Einstellung direkt auch eine Menge Zeit in Anspruch nehmen und ui freeze

Antwort

2
machen

die ui ist gefroren, bis lesen Datei abgeschlossen ist

Streams mit File.OpenText geöffnet sind nie asynchron. Wie I describe on my blog, müssen Sie die Datei mit einer Methode mit einem isAsync-Parameter (auf true) oder einem fileOptions-Parameter (einschließlich FileOptions.Asynchronous Wert) öffnen.

es scheint das Problem nicht Datei beim Lesen, aber große Menge an Text mit großen Datenmengen verwendet werden, bei der Einrichtung soll TextBox.Text properti über Datenbindung

Ja, UI-Elemente sind nicht . Sie müssen virtualization verwenden, wenn große Datenmengen angezeigt werden sollen.

+0

Danke für die Antwort, leider TextBox ist nicht in der Liste der Steuerelemente, die UI-Virtualisierung unterstützt – igorGIS

+0

@igorGIS: Dann müssen Sie Ihr eigenes Virtualisierungssystem erstellen, oder verwenden Sie eine Textanzeige, die Virtualisierung unterstützt (IIRC gibt es eine Art von Dokumentensystem). –

Verwandte Themen