C# Xamarinでアプリの開発をしています。
「PCL Storage」というプラグインを使用しているのですが、その中のメソッドのGetFilesAsyncとReadAllTextAsyncをコンストラクタで使用したいと思っています。ですが、このメソッドは非同期のもので、コンストラクタで使用することができなくて困っています。
C#
1 public class TaskListView : ListView 2 { 3 public TaskListView() 4 { 5 var data = makeTaskListData(); 6 ItemsSource = data.Result; 7 8 var cell = new DataTemplate(typeof(TextCell)); 9 cell.SetBinding(TextCell.TextProperty, "Title"); 10 11 ItemTemplate = cell; 12 } 13 14 // 非同期メソッドで実装するしかなかった。ListViewのデータクラス 15 private async Task<List<TaskData>> makeTaskListData() 16 { 17 IFolder rootFolder = FileSystem.Current.LocalStorage; 18 IList<IFile> fileList = await rootFolder.GetFilesAsync(); 19 var fileTitleList = new List<TaskData>(); 20 21 foreach (var file in fileList) 22 { 23 string fileTitle = await file.ReadAllTextAsync(); 24 // とりあえずタイトルを取得 25 fileTitleList.Add(new TaskData { Title = fileTitle }); 26 } 27 return fileTitleList; 28 } 29 }
このようにprivateのメソッドを作り、そこに非同期処理を纏めてから、コンストラクタで使用するという方法もやってみたのですが、このListViewを表示しようとするとフリーズしてしまいました。
根本的にやり方が間違っているような気がします。質問の内容以外でもおかしな所があれば、指摘していただけると嬉しいです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/20 05:48