2016-11-05 47 views
1

我有一個簡單的TreeView,當點擊TreeView項我只需要加載一個文本文件讀取文件異步還是塊的UI

下面是代碼:

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; 
    } 
} 

這個工作,但是當我點擊在treeview項目上,ui被凍結,直到文件讀取完成。爲什麼這樣的行爲我在我的代碼中有其他異步方法,他們不阻止用戶界面。

編輯:似乎沒有問題,在閱讀文件,但在設置大量的文本通過數據綁定textbox.text properti,雖然設置它直接還採取了很多的時間,使UI凍結

回答

2

的UI被凍結,直到文件讀取完成

流與File.OpenText打開永遠不會同步。如I describe on my blog,必須使用參數isAsync參數(設置爲true)或參數fileOptions(包括FileOptions.Asynchronous值)的方法打開文件。

似乎沒有問題,在閱讀文件,但在設置大量的文本通過數據綁定

是的,UI元素不打算海量數據的使用textbox.text properti 。如果您要顯示大量數據,則需要使用virtualization

+0

感謝您的回答,不幸的是,TextBox不在控件列表中,支持UI虛擬化 – igorGIS

+0

@igorGIS:那麼您將不得不建立自己的虛擬化系統,或使用支持虛擬化的文本顯示器(IIRC有某種文件系統)。 –