我正在尝试为商店制作一个简单的Windows 8 / RT应用程序,我有一个关于向ListBox添加项目的问题。
在我的主页中我有这段代码:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.brain = new MainController();
LoadData();
}
public void LoadData()
{
brain.GetNotesRepoFile().ReadFile();
Debug(""+brain.GetNotesRepoFile().GetNotesList().Count);
for(int i = 0; i < brain.GetNotesRepoFile().GetNotesList().Count; i++)
{
notesListBox.Items.Add( // code here );
}
}
}
public class NotesRepositoryFile
{
// CONSTRUCTOR
public NotesRepositoryFile()
{
this.notesRepository = new List<Note>();
}
// Read from file
public async void ReadFile()
{
// settings for the file
var path = @"Files\Notes.txt";
var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
// acquire file
var file = await folder.GetFileAsync(path);
var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
foreach (var line in readThis)
{
notesRepository.Add(new Note(line.Split(';')[0], line.Split(';')[1]));
// check if the item was added
Debug.WriteLine("Added: " + notesRepository[notesRepository.Count - 1].ToString());
}
Debug.WriteLine("File read successfully");
}
}
我的输出是:
0
补充:Test1
补充:Test2
文件已成功读取
我在这里尝试做的是从文件中读取字符串,并使用Items.Add将它们添加到listBox。但由于数组的大小为0,即使成功添加的项目也无效。
我不明白为什么 Debug(“+”brain.GetNotesRepoFile()。GetNotesList()。Count); 在之前执行 Brain.GetNotesRepoFile() .ReadFile(); 因为很明显不是这样。
此外,为什么这个解决方案有效,而且上面没有?
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.brain = new MainController();
ReadFile();
}
// Read from file
public async void ReadFile()
{
// settings for the file
var path = @"Files\Notes.txt";
var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
// acquire file
var file = await folder.GetFileAsync(path);
var readThis = await Windows.Storage.FileIO.ReadLinesAsync(file);
foreach (var line in readThis)
{
brain.AddNote(line.Split(';')[0], line.Split(';')[1]);
notesListBox.Items.Add(brain.GetNotesRepoFile().GetNotesList()[brain.GetNotesRepoFile().GetNotesList().Count - 1].ToString());
}
Debug.WriteLine("File read successfully");
}
}
答案 0 :(得分:1)
嗯,使用async和await是错误的代码,请根据以下代码进行更改
首先,在NotesRepositoryFile类
中public async Task<bool> ReadFile()
{
//Your code
if (notesRepository.Count > 0) return true;
return false;
}
MainPage中的第二个
public async void LoadData()
{
bool HasNote = await brain.GetNotesRepoFile().ReadFile();
if (HasNote)
{
for (int i = 0; i < brain.GetNotesRepoFile().notesRepository.Count; i++)
{
//Your code
}
}
}